Considere que a.c contiene:

void _start(void);
void _start(void) { while (1); }

Con gcc 5.4.0 en Ubuntu, el siguiente comando genera un archivo ELF con el tipo EXEC y sin dependencias externas:

gcc -o ./a -x c ./a.c -nostartfiles -nostdlib -nodefaultlibs

Sin embargo, el mismo comando con gcc 6.4.0 en Gentoo produce un archivo ELF con el tipo DYN que solicita el intérprete de programa estándar /lib64/ld-linux-x86-64.so.2.

Entonces, ¿cómo puedo generar un binario EXEC verdaderamente independiente con gcc 6.4.0?

gcc
0
EnTaroAdun 25 feb. 2018 a las 02:30

2 respuestas

La mejor respuesta

Debe compilar en modo no PIE para crear un ejecutable dependiente de la posición. Consiste en dos pasos:

  • Compile con -fno-pie.
  • Vincular con -no-pie.

La vinculación del código compilado como PIE en un ejecutable dependiente de la posición funciona, pero dará como resultado una pérdida de rendimiento y un ejecutable más grande.

0
Florian Weimer 25 feb. 2018 a las 13:10

Lo encontré. Uno debe especificar -no-pie.

0
EnTaroAdun 24 feb. 2018 a las 23:39