FromNandの日記

自分的備忘録

【PEヘッダ】PEヘッダ解析における簡単な流れについて

大まかな流れは「https://tech.blog.aerie.jp/archive/category/Portable%20Executable」と「リバース・エンジニアリングバイブル」で確認してほしい。

中でも「https://tech.blog.aerie.jp/entry/2015/12/27/140649」」では、PEヘッダの流れが一望できる。

 

IMAGE_DOS_HEADERの中には「MZシグネチャ」と「IMAGE_NT_HEADERまでのオフセット」が入っている。


IMAGE_NT_HEADERには、「PEシグネチャ」と「IMAGE_FILE_HEADER」、「IMAGE_OPTIONAL_HEADER」が入っている。


IMAGE_FILE_HEADERには、そのファイルの属性(作成日・strippedかどうか・対象アーキテクチャ...)が記録されている。


IMAGE_OPTIONAL_HEADERには、ベースアドレス・セクションのアライメント・コードのサイズ・データのサイズといった重要な情報が格納されている。


IMAGE_OPTIONAL_HEADERの最後の要素は「IMAGE_DATA_DIRECTORY」という構造体が16個(IMAGE_NUMBEROF_DIRECROTY_ENTRIES)になっている。

 

IMAGE_SECTION_HEADERという、主に各セクションの名前・開始アドレス・サイズなどを管理する構造体があるのだが、これはIMAGE_OPTIONAL_HEADERの直後のアドレスに配置されている。


IMAGE_DATA_DIRECTORYには、エクスポート・インポート・リソース・IATといったディレクトリの仮想アドレスとサイズが格納されている。