GNU/Linux >> Tutoriales Linux >  >> Linux

¿Obtener las opciones del compilador de un ejecutable compilado?

gcc tiene un -frecord-gcc-switches opción para eso:

   -frecord-gcc-switches
       This switch causes the command line that was used to invoke the compiler to
       be recorded into the object file that is being created.  This switch is only
       implemented on some targets and the exact format of the recording is target
       and binary file format dependent, but it usually takes the form of a section
       containing ASCII text.

Luego, los ejecutables ELF contendrán .GCC.command.line sección con esa información.

$ gcc -O2 -frecord-gcc-switches a.c
$ readelf -p .GCC.command.line a.out 

String dump of section '.GCC.command.line':
  [     0]  a.c
  [     4]  -mtune=generic
  [    13]  -march=x86-64
  [    21]  -O2
  [    25]  -frecord-gcc-switches

Por supuesto, no funcionará para ejecutables compilados sin esa opción.

Para el caso simple de optimizaciones, podría intente usar un depurador si el archivo se compiló con información de depuración. Si lo recorre un poco, puede notar que algunas variables se 'optimizaron'. Eso sugiere que se llevó a cabo la optimización.


Otra opción es -grecord-gcc-swtiches (nota, no -f sino -g). De acuerdo con los documentos de gcc, pondrá banderas en la información de depuración enana. Y parece que está habilitado de forma predeterminada desde gcc 4.8.

Descubrí que el programa dwarfdump es útil para extraer esos cflags. Tenga en cuenta que el programa de cadenas no los ve. Parece que la información de los enanos está comprimida.


Si compilas con el -frecord-gcc-switches bandera, entonces las opciones del compilador de la línea de comandos se escribirán en binario en la sección de notas. Consulte también los documentos.


Linux
  1. Xmanager:¡Error al obtener la fecha de instalación del registro del sistema! [Resuelto]

  2. ¿Cómo obtener descripciones de las opciones `shopt` disponibles?

  3. Linux:¿podemos obtener información del compilador de un binario Elf?

  4. ¿Cómo obtener la URL del archivo de Dropbox desde la línea de comando?

  5. ¿Cómo obtengo mi dirección IP desde la línea de comandos?

Cómo obtener el nombre de archivo de la ruta completa en Linux

Cómo obtener el mejor rendimiento del servidor Nginx

¿Cómo desensamblar un ejecutable binario en Linux para obtener el código de ensamblaje?

¿Cómo obtener la ruta al archivo actual (pwd) en Linux desde C?

¿Cómo puedo obtener información del contenedor de Docker Linux desde el propio contenedor?

¿Cómo puedo obtener la duración de un archivo de video desde la consola?