IMAGE_DOS_HEADER
PEファイルの先頭には「IMAGE_DOS_HEADER」構造体が格納されています。
細かい定義はヘッダファイルを検索して貰うとして、重要なメンバ変数は以下の2つになります。
メンバ | |
---|---|
e_magic | 固定の値「MZ」が指定されている。IMAGE_DOS_SIGNATUREとして定義。 |
e_lfanew | 拡張ヘッダへのオフセット値(バイト単位) |
まずはe_magicをチェックして正しいファイルであるかどうかを確認、e_lfanewで次の構造体へのアクセス位置を確認します。
この段階ではまだアドレスとファイルポインタの値は一致しているので、そのままアクセスできます。
IMAGE_DOS_HEADER& tDOS = (*(IMAGE_DOS_HEADER*)pFile);
if( tDOS.e_magic != IMAGE_DOS_SIGNATURE ){ return false;}
次はIMAGE_NT_HEADERSの解析に入りますが、この辺りから少し面倒な処理が入ってきます。