なぜ`strip`はELF実行可能ファイルからセクションヘッダを削除しないのですか?

なぜ`strip`はELF実行可能ファイルからセクションヘッダを削除しないのですか?

最小ELF実行可能ファイルには、ELFヘッダーと少なくとも1つのプログラムヘッダーがあれば機能します。ただし、短い実行可能ファイルでストリップを実行すると、セクションヘッダーテーブルまたはセクション文字列セクションを削除せずに、プログラムの実行に何も提供しない場合でも保持することを決定します(私が知っている限り)。

ストリッピングで削除されない理由はありますか?実行可能ファイルを実行するために必要とされていないすべてを削除できる別のユーティリティはありますか?セクションヘッダーを削除するために作成しているコードゴルフ実行可能ファイルを手動で編集してみましたが、うまく機能しているようで、はるかに小さいです。

ベストアンサー1

出荷書類ビーチGNUバイナリチルstrip ヒントその理由は明示的に明記されていませんが、説明に記載されています--only-keep-debug

注 - 削除されたセクションのセクションヘッダーはサイズを含むままですが、セクションの内容は削除されます。実行可能ファイルが別のアドレス空間に再配置されていても、他のツールがdebuginfoファイルを実際の実行可能ファイルと照合できるように、セクションヘッダーが保存されます。

つまり、-Rオプションで明示的に指示しない限り、セクションstripヘッダーは他のプログラム(含まれている)が操作を実行するのに役立つように維持されますgdb

このページストリップコマンドの正しい使用(部分Linuxオペレーティングシステムを使用したリバースエンジニアリング) コメント

実行可能ファイルに対してコマンドを実行することは、stripプログラムを保護する最も一般的な方法です。基本操作では、このstripコマンドは実行可能ファイルからシンボルテーブルとすべてのデバッグ情報を削除します。これが一般的に使用される方法です。しかし、まだ削除されていないいくつかの有用な情報があります。

そして、後に残ることができるいくつかの便利な項目、つまり分析のために「削除された」実行可能ファイルをリストします。

存在するLinuxバイナリ分析を学ぶ、セクションヘッダは、一般的に誰かが所有している場合にのみ失われるという意見で繰り返しました。意図的にこれを削除すると、セクションヘッダーがなくなり、ほとんど役に立たなくなりますgdbobjdump

おすすめ記事