ejecutar con compilar compilador comando c main entry-point

con - gcc ubuntu



¿Cómo cambiar el punto de entrada del programa C con gcc? (3)

¿Cómo cambiar el punto de entrada de un programa en C compilado con gcc?
Al igual que en el siguiente código

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


Es un ajuste del enlazador:

-Wl,-eentry

la cosa -Wl,... pasa los argumentos al vinculador, y el vinculador toma un argumento -e para establecer la función de entrada


Puedes modificar tu código fuente como:

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

La sección ".interp" permitirá que su programa pueda llamar a una biblioteca compartida externa. La llamada de salida hará que su función de entrada salga del programa en lugar de regresar.

Luego construye el programa como una biblioteca compartida que es ejecutable:

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


Si está en un sistema que proporciona GNU Binutils (como Linux), puede usar el comando objcopy para hacer que una función arbitraria sea el nuevo punto de entrada.

Supongamos que un archivo llamado program.c contiene la función de entry :

$ cat > program.c #include <stdio.h> int entry() { return 0; } ^D

  1. Primero lo compila usando -c para generar un archivo de objeto reubicable:

    $ gcc -c program.c -o program.o

  2. A continuación, redefinir la entry para ser main :

    $ objcopy --redefine-sym entry=main program.o

  3. Ahora usa gcc para compilar el nuevo archivo de objeto:

    $ gcc program.o -o program

NOTA: Si su programa ya tiene una función llamada main , antes del paso 2, puede realizar una invocación de objcopy separado:

objcopy --redefine-sym oldmain=main program.o