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


9

最小のELF実行可能ファイルが機能するには、ELFヘッダーと少なくとも1つのプログラムヘッダーのみが必要です。ただし、短い実行可能ファイルでストリップを実行すると、セクションヘッダーテーブルまたはセクション文字列セクションを破棄せずに、プログラムの実行に(私の知る限り)目的はありませんが、それらを保持します。

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


一部のプログラム/ランタイムが壊れる可能性があるため、除去されていません
cat

回答:


3

ドキュメントGNU binutilsのstrip 暗示理由に、しかしの説明で言及し、明示的ではない--only-keep-debugこと

注-削除されたセクションのセクションヘッダーは、サイズも含めて保持されますが、セクションの内容は破棄されます。セクションヘッダーは保持されるため、他のツールがdebuginfoファイルを実際の実行可能ファイルと一致させることができます(その実行可能ファイルが別のアドレススペースに再配置されている場合でも)。

つまり、-Rオプションを介して明示的に指示されない限り、stripはセクションヘッダーを保持して、他のプログラム(を含むgdb)が作業を行うのを助けます。

ページstripコマンドの正しい使用(一部のLinuxオペレーティング・システムを使用してリバースエンジニアリング)の注意事項

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

そして、「取り除かれた」実行可能ファイルの分析のために、残されているかもしれないいくつかの有用なものを列挙します。

学ぶLinuxのバイナリ分析、これは、セクションヘッダが正常にのみ、誰かがしたときに失われていることをコメントし、繰り返される意図的にそれらを除去し、そのセクションのヘッダなしで、gdbかつobjdumpほとんど役に立ちません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.