3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PEファイルのバイナリ構造(4) IMAGE_OPTIONAL_HEADER

Posted at

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の情報を元に、エクスポートされている関数の情報を取得していきます。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?