GNU/Linux >> Linux の 問題 >  >> Linux

コンパイルされた実行可能ファイルからコンパイラ オプションを取得しますか?

gcc には -frecord-gcc-switches があります そのためのオプション:

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

その後、ELF 実行可能ファイルには .GCC.command.line が含まれます。

$ 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

もちろん、そのオプションなしでコンパイルされた実行可能ファイルでは機能しません。

最適化の単純なケースでは、できる ファイルがデバッグ情報付きでコンパイルされている場合は、デバッガーを使用してみてください。少し進んでみると、いくつかの変数が「最適化されていない」ことに気付くかもしれません。これは、最適化が行われたことを示唆しています。


もう 1 つのオプションは -grecord-gcc-swtiches (注意、-f ではなく -g) です。 gcc docs によると、dwarf デバッグ情報にフラグが設定されます。 gcc 4.8 以降、デフォルトで有効になっているようです。

これらの cflags を抽出するには、dwarfdump プログラムが役立つことがわかりました。文字列プログラムはそれらを認識しないことに注意してください。ドワーフの情報が圧縮されているようです。


-frecord-gcc-switches でコンパイルした場合 flag を指定すると、コマンド ライン コンパイラ オプションがメモ セクションのバイナリに書き込まれます。ドキュメントも参照してください。


Linux
  1. 利用可能な`shopt`オプションの説明を取得する方法は?

  2. Linux – Elfバイナリからコンパイラ情報を取得できますか?

  3. Linux:システムからすべてのログインログを取得する方法は?

  1. Linux でバイナリ実行可能ファイルを逆アセンブルしてアセンブリ コードを取得する方法は?

  2. openssl を使用してサーバーから証明書を取得する

  3. コマンドラインから nvidia ドライバーのバージョンを取得するには?

  1. シェル スクリプトの各行から最初の 5 文字を取得する

  2. コマンドラインから Dropbox ファイルの URL を取得するには?

  3. コマンドラインから IP アドレスを取得するにはどうすればよいですか?