速い質問があります。次のコードを使用して、ACコードからELFバイナリを生成しました。
gcc -o simple simple.c
その後、ELFバイナリに対してobjdumpを実行しました。
objdump --disassemble-all simple
私のディレクトリを確認しましたが、ls -a
そこに.oファイルがありません。私の質問は、objdump
完全な分解コードを表示する方法です。objdump
すべてのコードをカバーするためにバイナリで静的分析が行われますか?
ベストアンサー1
objdump
逆アセンブリコードがその役割を果たしているので、見せてください。実行可能ファイルの形式を知っています。実行ファイルは単純なコマンドの直接的な順序ではなく構造を持っています。実行可能ファイルは通常、さまざまなメタデータを含むヘッダーで始まり、セクションで構成されます。動的にリンクされた実行可能ファイルには、動的リンカーが必要とする十分な情報が含まれている必要があります。したがって、実行可能ファイルに必要なシンボルとそのシンボルがロードされる場所を示し、プログラムが実行されたときにそのシンボルを見つけることができるようにする必要があります。
たとえば、ほとんどのUnixシステムでは、次のように使用します。非常に低い周波数(他の形式も存在します)。objdump
ELFバイナリが検出された場合(確認して)マジックナンバーファイルの先頭から)解析します。ファイルヘッダ、プログラムヘッダーとセクションテーブルの位置を知ることができます。各セクションには、含まれているコンテンツタイプの表示が含まれています。objdump
各セクションはそのタイプに応じてさらに解析されます。コードを含める必要があるセクションを見つけたら、そのセクションに対して逆アセンブラを実行します。
逆アセンブリは原則として非常に簡単です。コードは命令のリストであり、逆アセンブリは単に命令のバイナリ表現をテキスト表現に変換します。逆アセンブラはコマンドを順番に取得します。実際、様々な命令サイズを有するアーキテクチャでは、データをコードセグメントに含めることができるので、状況がより複雑になる可能性がある。objdump
通常、「一般」実行可能ファイルで動作しますが、意図的に難読化されたバイナリでは合理的な出力を生成できない可能性があります。
objdump
静的分析は行われません。命令の意味を分析するのではなく、直接解析と翻訳のみを実行します。