Как изменить точку входа программы C с помощью gcc?
Как изменить точку входа программы на языке C, скомпилированной с помощью gcc?
Как и в следующем коде
#include<stdio.h>
int entry() //entry is the entry point instead of main
{
return 0;
}
Ответ 1
Это установка компоновщика:
-Wl,-eentry
объект -Wl,... передает аргументы компоновщику, а компоновщик принимает аргумент -e для установки функции ввода
Ответ 2
Вы можете изменить исходный код следующим образом:
#include<stdio.h>
const char my_interp[] __attribute__((section(".interp"))) = "/lib/ld-linux.so.2";
int entry() //entry is the entry point instead of main
{
exit(0);
}
Раздел ".interp" позволит вашей программе вызывать внешнюю общую библиотеку.
Вызов exit приведет к тому, что ваша функция входа выйдет из программы вместо возврата.
Затем создайте программу как исполняемую библиотеку:
Если вы находитесь в системе, которая предоставляет GNU Binutils (например, Linux),
вы можете использовать команду objcopy
сделать произвольную функцию новой точкой входа.
Предположим, что файл с именем program.c, содержащий функцию entry: