2012-05-17 12 views
8

Estoy tratando de entender cómo Linux inicia un programa. Leí en alguna parte que alguna función en glibc llama a la función principal. Perfilando con callgrind y mirando los call-graphs en Kcachegrind, veo below main que llama main. Pero no entiendo esto, una función no puede llamarse así. Entonces mi pregunta es qué función en el glibc realmente comienza la función principal. propia ayudaQué función en glibc llama a la función principal

+2

__libc_start_main() Creo que, http://linuxgazette.net/issue84/hawk.html – user1399238

+2

[ '__libc_start_main'] (http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic /LSB-Core-generic/baselib---libc-start-main-.html) definido en la Base estándar de Linux. – birryree

+0

También verifique estas preguntas: http://stackoverflow.com/questions/8668913/elf-binary-compiled-by-gcc-what-happens-from-entry-point-to-main y http://stackoverflow.com/ preguntas/524826/linux-es-es-posible-escribir-un-programa-de-trabajo-que-no-confía-en-la-libc – birryree

Respuesta

11

Después de valgrind se encuentra esta explicación de la opción --show-por debajo de la principal:

Por defecto, trazas de la pila de errores no muestran las funciones que aparecen debajo principal porque la mayoría de las veces no es interesante C cosas de la biblioteca y/o gobbledygook. Alternativamente, si main no es presente en el seguimiento de la pila, las trazas de la pila no mostrarán ninguna función debajo de las funciones principales, como glibc's __libc_start_main. Además, si las funciones de tipo principal están presentes en la traza, están normalizadas como (debajo del principal), para hacer que la salida sea más determinista.

Como tal, a continuación principal no es la función que se llama principal, pero __libc_start_main.

Cuestiones relacionadas