3

テスト プラットフォームは 32 ビット Linux です。

シンボル情報を削除せずに ac プログラムをコンパイルし、objdump を使用して elf 実行可能ファイルを逆アセンブルします。

こちらが結果の一部です。

804831c:  e8 8c fe ff ff     call 8048360 <printf@plt>

私が使用する場合:

strip binary 

シンボル情報を削除し、objdump を使用して elf 実行可能ファイルを再度逆アセンブルすると、次のような結果が表示されます。

804831c:  e8 8c fe ff ff     call 8048360 <printf@plt>

だから私の質問は:

すべてのシンボル情報を削除した後、objdump のような逆アセンブリ ツールは特定のライブラリ関数の名前をどのように認識できますか?

ありがとうございました!

4

2 に答える 2

4

ELF ファイルには、.symtab と .dynsym の 2 つのシンボル テーブルがあります。後者は、動的リンク (再配置) に必要な動的シンボル用です。あなたの場合、printf は .dynsym にあり、.symtab にも存在する可能性があります。デフォルトでは、strip は .symtab を削除しますが、再配置に必要な .dynsym は削除しません。

あなたは試すことができます

ストリップ -R .dynsym your_binary

dynsym セクションを手動で削除すると、再配置の失敗により実行に失敗することがわかります。

于 2014-01-15T02:04:36.720 に答える