Если вы работаете в системе, которая предоставляет GNU Binutils (например, Linux), вы можете использовать команду objcopy
, чтобы сделать произвольную функцию новой точкой входа.
Предположим, чтофайл с именем program.c
, содержащий функцию entry
:
$ cat > program.c
#include <stdio.h>
int entry()
{
return 0;
}
^D
Сначала вы компилируете его, используя -c
, для создания перемещаемого объектного файла:
$ gcc -c program.c -o program.o
Затем вы переопределяете entry
на main
:
$ objcopy --redefine-sym entry=main program.o
Теперь используйте gcc для компиляции нового объектного файла:
$ gcc program.o -o program
ПРИМЕЧАНИЕ: Если в вашей программе уже есть функция с именем main
, перед шагом 2 вы можете выполнить отдельный вызов objcopy
:
objcopy --redefine-sym oldmain=main program.o