IDA で、私が分析した PE ファイルには、.rdata
セクションだけでなく.idata
. 違いは何ですか?
2 に答える
.rdata
const データ用です。これは、.data セグメントの読み取り専用バージョンです。.idata
インポート ディレクトリ (エクスポート用の .edata) を保持します。これは、インポートおよびエクスポートされた関数を指定するために EXE および DLL によって使用されます。詳細については、PE 形式の仕様 ( http://msdn.microsoft.com/library/windows/hardware/gg463125 ) を参照してください。
典型的なセグメント名の要約:
.text: Code
.data: Initialized data
.bss: Uninitialized data
.rdata: Const/read-only (and initialized) data
.edata: Export descriptors
.idata: Import descriptors
.reloc: Relocation table (for code instructions with absolute addressing when
the module could not be loaded at its preferred base address)
.rsrc: Resources (icon, bitmap, dialog, ...)
.tls: __declspec(thread) data (Fails with dynamically loaded DLLs -> hard to find bugs)
Martin Rosenau が言及しているように、セグメント名は典型的なものにすぎません。真のセグメント タイプは、セグメント ヘッダーで指定されるか、セグメントに格納されたデータの使用法によって定義されます。
実際、セグメントの名前は Windows によって無視されます。
異なるセグメント名を使用するリンカーがあり、個別のセグメントを使用する代わりに、インポート記述子、エクスポート記述子、リソースなどを「.text」セグメントに格納することさえ可能です。
ただし、そのようなメタデータ用に個別のセクションを作成する方が簡単なように思われるため、ほとんどのリンカーは個別のセクションを使用します。
つまり、セクション「.idata」、「.rdata」、「.rsrc」、... にはプログラム データは含まれませんが (それらの名前は「data」で終わります)、オペレーティング システムによって使用されるメタ情報が含まれます。たとえば、「.rsrc」セクションには、エクスプローラーで実行可能ファイルを見たときに表示されるアイコンに関する情報が保持されます。
「.idata」には、プログラムに必要なすべての DLL ファイルに関する情報が含まれています。