IMAGE_OPTIONAL_HEADER
IMAGE_NT_HEADERSのメンバとして定義されている構造体ですが、32bitの場合は、IMAGE_OPTIONAL_HEADER32、64bitの場合はIMAGE_OPTIONAL_HEADER64として定義されます。
こちらで重要なのは以下のメンバ変数になります。
メンバ | |
---|---|
Magic | 32bit(IMAGE_NT_OPTIONAL_HDR32_MAGIC)と64bit(IMAGE_NT_OPTIONAL_HDR64_MAGIC)のフラグが収納されている。 |
ImageBase | 実行ファイルとしてメモリ上に読まれる時にベースとなるメモリアドレス。 |
DataDirectory | 必要とされるセクション(情報)のアドレスとサイズを保存。 |
前回IMAGE_FILE_HEADERのMachineでアーキテクチャを確認しましたが、こちらのMagicでも32bitと64bitは判別可能です。
ただ既に判別は終わっていますので、必要であれば一応確認するというぐらいでしょうか。
ImageBaseは実行環境のメモリのベースアドレスを示します。
実行環境ということですので、32bitではDWORD、64bitではULONGLONGとメモリを示す変数のサイズが違い、これが構造体が分けられている理由となります。
最後のDataDirectoryですが、こちらはIMAGE_OPTIONAL_HEADERの構造体配列になっており、「目的としているデータが保存されている場所を示す情報が保存されている位置を示すアドレス」が保存されています。
#何というか、たらいまわし的な感じが…
次回はDataDirectoryの情報を元に、エクスポートされている関数の情報を取得していきます。