Obtenga las opciones del comstackdor de un ejecutable comstackdo?

¿Hay alguna manera de ver qué comstackdor y banderas se usaron para crear un archivo ejecutable en * nix? Tengo comstackda una versión anterior de mi código y me gustaría ver si fue comstackda con o sin optimización. Google no fue de mucha ayuda, pero no estoy seguro de estar usando las palabras clave correctas.

gcc tiene una -frecord-gcc-switches 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. 

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

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

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


Para el caso simple de optimizaciones, podría intentar usar un depurador si el archivo se compiló con información de depuración. Si lo hace un poco, puede observar que algunas variables fueron ‘optimizadas’. Eso sugiere que la optimización tuvo lugar.

Si comstack con el -frecord-gcc-switches , las opciones del comstackdor de la línea de comandos se escribirán en el binario en la sección de notas. Ver también los documentos .

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

He encontrado que el progtwig dwarfdump es útil para extraer esos cflags. Tenga en cuenta que el progtwig de cadenas no los ve. Parece que la información enana está comprimida.

Esto es algo que requeriría el soporte del comstackdor. No mencionas qué comstackdor estás usando, pero como tagste tu pregunta en linux , asumiré que estás usando gcc, que no predetermina la función que estás preguntando (pero -frecord-gcc-switches es una opción para realizar esta).

Si desea inspeccionar su binario, el comando de strings le mostrará todo lo que parece ser una cadena de caracteres legible dentro del archivo.

Lo dudo mucho de que sea posible:

 int main() { } 

Cuando se comstack con:

 gcc -O3 -ffast-math -g main.c -o main 

Ninguno de los parámetros se puede encontrar en el objeto generado:

 strings main | grep -O3 (no output) 

Si todavía tiene el comstackdor (la misma versión) que usó, y es solo un indicador del que no está seguro, puede intentar comstackr su código nuevamente, una vez con y sin una bandera. Entonces puedes comparar los ejecutables. Su anterior debería ser idéntico, o muy similar, a uno de los nuevos.