GNU/Linux >> Znalost Linux >  >> Linux

Získat možnosti kompilátoru z kompilovaného spustitelného souboru?

gcc má -frecord-gcc-switches možnost pro to:

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

Poté budou spustitelné soubory ELF obsahovat .GCC.command.line sekce s těmito informacemi.

$ 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

Samozřejmě to nebude fungovat pro spustitelné soubory zkompilované bez této možnosti.

V jednoduchém případě optimalizace můžete zkuste použít debugger, pokud byl soubor zkompilován s informacemi o ladění. Když to trochu projdete, můžete si všimnout, že některé proměnné byly „optimalizovány“. To naznačuje, že došlo k optimalizaci.


Další možností je -grecord-gcc-swtiches (poznámka, ne -f, ale -g). Podle dokumentů gcc to vloží příznaky do informací o ladění trpaslíků. A vypadá to, že je ve výchozím nastavení povoleno od gcc 4.8.

Zjistil jsem, že program dwarfdump je užitečný k extrahování těchto cflags. Všimněte si, že program strings je nevidí. Zdá se, že informace o trpaslíkech jsou komprimované.


Pokud kompilujete s -frecord-gcc-switches flag, pak budou možnosti kompilátoru příkazového řádku zapsány binárně v sekci poznámek. Viz také dokumenty.


Linux
  1. Xmanager:Nepodařilo se získat datum instalace ze systémového registru! [vyřešeno]

  2. Linux:Jak získat všechny přihlašovací protokoly ze systému?

  3. Jak rozebrat binární spustitelný soubor v Linuxu, abyste získali kód sestavení?

  1. Pomocí openssl získáte certifikát ze serveru

  2. Získejte poslední 4 znaky výstupu ze standardního výstupu

  3. Jak získat verzi ovladače nvidia z příkazového řádku?

  1. získat prvních 5 znaků z každého řádku v shell skriptu

  2. Jak získat adresu URL souboru Dropbox z příkazového řádku?

  3. Jak získám svou IP adresu z příkazového řádku?