Comprender las vulnerabilidades de diseño del lenguaje C: ¿Por qué no se permite la sobrecarga de funciones?

  1. En el lenguaje C, incluso si el tipo de retorno no está escrito, el programa se puede compilar y ejecutar. Porque la función del lenguaje C solo mira el nombre, no el tipo de retorno. Al buscar la función de entrada, el programa solo necesita encontrar la función denominada "principal" y no se preocupa por el tipo de devolución y el tipo de parámetro.

  2. El lenguaje C no permite la sobrecarga de funciones, la función con el mismo nombre solo tiene diferentes parámetros, el lenguaje C la considera como un símbolo de función duplicada.

  3. En lenguaje C, la persona que llama borra la pila, por lo que puede declararse como tipo vacío en la función principal incluso si no se escriben parámetros, el programa no fallará, pero no se pueden obtener los parámetros de la línea de comando.

  4. A nivel de ensamblador, el valor devuelto por la función es el valor del registro EAX, si no se asigna ningún valor, el registro EAX es un número aleatorio. Por lo tanto, incluso si se declara como tipo vacío, la función principal también tiene un valor de retorno, que es solo un valor aleatorio.

  5. El diseño del lenguaje C tiene algunas imprecisiones, algunas de las cuales quedaron de los primeros compiladores, por lo que el código debe escribirse de acuerdo con la especificación del lenguaje C moderno para mejorar la legibilidad y el mantenimiento.

  6. Aunque el valor de retorno de la función principal puede no tener un significado práctico en el código, aún tiene un rol. En el sistema Unix, un proceso se llama como una función Después de iniciar un proceso secundario, es necesario utilizar el valor de retorno del proceso para obtener el estado de si el proceso secundario se está ejecutando correctamente. Por lo tanto, el valor de retorno de la función principal se devolverá al proceso principal como el código de estado del final del proceso.


    e4d1c98c8b84b362b1d0336ecfa02ae8.jpegDa la casualidad de que tengo un paquete de lenguaje C aquí, envíeme un mensaje privado para obtenerlo

Supongo que te gusta

Origin blog.csdn.net/m0_67034740/article/details/129730107
Recomendado
Clasificación