特定の ELF 実行ファイルをコンパイルするために使用された GCC バージョンを取得するにはどうすればよいでしょうか? 質問する

特定の ELF 実行ファイルをコンパイルするために使用された GCC バージョンを取得するにはどうすればよいでしょうか? 質問する

特定の実行可能ファイルをコンパイルするために使用された GCC バージョンを取得したいと思います。試してみましたreadelfが、情報を取得できませんでした。何かご意見はありますか?

ベストアンサー1

通常はコメント欄に保存されます

strings -a <binary/library> |grep "GCC: ("

GCC: (GNU) XXX を返します

strip -R .comment <binary>
strings -a <binary/library> |grep "GCC: ("

出力を返さない

.comment(および.note)セクションを削除してサイズを縮小することは珍しくありません。

strip --strip-all -R .note -R .comment <binary>
strip --strip-unneeded -R .note -R .comment <library>

注: busybox 文字列はデフォルトで -a オプションを指定します。これは .comment セクションに必要です。

編集: Berendra Tusla の回答とは反対に、このメソッドが機能するためにデバッグ フラグを使用してコンパイルする必要はありません。

バイナリの例:

# echo "int main(void){}">a.c
# gcc -o a a.c -s
# strings -a a |grep GCC
GCC: (GNU) 4.3.4
# strip -R .comment a
# strings -a a |grep GCC
#

オブジェクトの例:

# gcc -c a.c -s
# strings -a a.o |grep GCC
GCC: (GNU) 4.3.4
# strip -R .comment a.o
# strings -a a |grep GCC
#

-g (デバッグ) フラグがないこと、および不要なシンボルを削除する -s フラグが存在することに注意してください。.comment セクションが削除されない限り、GCC 情報は引き続き利用できます。この情報をそのまま保持する必要がある場合は、makefile (または該当するビルド スクリプト) をチェックして、-fno-ident が $CFLAGS にないこと、および $STRIP コマンドに -R .comment がないことを確認する必要があります。-fno-ident は、gcc がコメント セクションでこれらのシンボルを生成しないようにします。

おすすめ記事