Как изменить точку входа программы C с помощью gcc?

Как изменить точку входа программы C, скомпилированной с gcc ?
Как и в следующем коде

#include<stdio.h>
int entry()  //entry is the entry point instead of main
 {
   return 0;
 }

3 ответов


это настройка компоновщика:

-Wl,-eentry

на -Wl,... вещь передает Аргументы компоновщику, и компоновщик принимает -e аргумент для установки функции ввода


Вы можете изменить исходный код так:

#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);
}

The ".раздел "interp" позволит вашей программе вызывать внешнюю общую библиотеку. Вызов выхода сделает вашу функцию входа для выхода из программы вместо возврата.

затем создайте программу как общую библиотеку, которая является исполняемой:

$ gcc -shared -fPIC -e entry test_main.c -o test_main.so
$ ./test_main

если вы находитесь в системе, которая обеспечивает ГНУ пакета binutils (как Linux), вы можете использовать