GNU/Linux >> Linux Esercitazione >  >> Linux

Ottieni le opzioni del compilatore da un eseguibile compilato?

gcc ha un -frecord-gcc-switches opzione per questo:

   -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.

Successivamente, gli eseguibili ELF conterranno .GCC.command.line sezione con tali informazioni.

$ 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

Naturalmente, non funzionerà per gli eseguibili compilati senza questa opzione.

Per il semplice caso di ottimizzazioni, potresti prova a utilizzare un debugger se il file è stato compilato con informazioni di debug. Se lo passi un po ', potresti notare che alcune variabili sono state "ottimizzate". Ciò suggerisce che l'ottimizzazione ha avuto luogo.


Un'altra opzione è -grecord-gcc-swtiches (nota, non -f ma -g). Secondo i documenti di gcc, inserirà i flag nelle informazioni di debug nane. E sembra che sia abilitato per impostazione predefinita da gcc 4.8.

Ho trovato il programma dwarfdump utile per estrarre quei cflags. Nota, il programma di stringhe non le vede. Sembra che le informazioni sui nani siano compresse.


Se compili con -frecord-gcc-switches flag, le opzioni del compilatore della riga di comando verranno scritte nel file binario nella sezione delle note. Vedi anche i documenti.


Linux
  1. Xmanager:impossibile ottenere la data di installazione dal registro di sistema! [Risolto]

  2. Come ottenere le descrizioni delle opzioni `shopt` disponibili?

  3. Linux:possiamo ottenere informazioni sul compilatore da un binario elfo?

  4. Come ottenere l'URL del file Dropbox dalla riga di comando?

  5. Come ottengo il mio indirizzo IP dalla riga di comando?

Come ottenere il nome del file dal percorso completo in Linux

Come ottenere le migliori prestazioni dal server Nginx

Ottieni gli ultimi 4 caratteri dell'output da standard out

Come ottenere il percorso del file corrente (pwd) in Linux da C?

Come posso ottenere informazioni sul contenitore Docker Linux dall'interno del contenitore stesso?

Come posso ottenere la lunghezza di un file video dalla console?