¿Cómo puedo averiguar dónde se define main() en un proyecto grande?
Digamos que tengo el siguiente programa (a.c
):
#include <stdio.h>
void f()
{
printf("¡Hola, mundo!");
}
int main(void)
{
f();
return 0;
}
$ gcc -g a.c
Teniendo a.out
, ¿cómo puedo encontrar dónde se define main()
? Es decir, en un proyecto grande no siempre está claro de dónde proviene main()
.</stdio.h>
davy.ai
Para encontrar dónde se define
main()
en el programaa.out
, puedes utilizar el comandonm
, el cual lista los símbolos en archivos objeto o ejecutables.Primero, ejecuta el comando
nm a.out
en tu terminal. Esto imprimirá una lista de símbolos, incluyendomain
, y su dirección correspondiente.A continuación, puedes utilizar el comando
objdump
para desensamblar el archivo ejecutable y localizar la dirección demain
. Ejecuta el comandoobjdump -d a.out | less
para ver la salida desensamblada en la terminal. Desplázate hacia abajo hasta la sección que contiene la funciónmain
y busca la dirección mencionada en la salida denm
.Alternativamente, también puedes utilizar el comando
readelf
para mostrar información detallada sobre el programa ejecutable. Ejecuta el comandoreadelf -a a.out | less
y busca la funciónmain
en la salida.Por último, puedes utilizar la información de depuración
dwarf
para localizarmain
. Esto se puede hacer compilando el programa con la opción-g
, la cual genera la información de depuración. Luego puedes utilizar un depurador, comogdb
, para examinar el programa y encontrar la fuente y el número de línea donde se define la función.