上一篇講到PE load程序已經找到了PE文件頭,PE文件頭的定義如下所示:
IMAGE_NT_HEADERS STRUCT
Signature DWORD ? ;PE文件標識
FileHeader IMAGE_FILE_HEADER <>
OptionalHeader IMAGE_OPTIONAL_HEADER32 <>
IMAGE_NT_HEADERS ENDS
Signature爲PE文件標識,其值始終爲00004550h,查ASCII表可以知道45h代表字符E,50h代表字符P。緊接着PE文件標識的是IMAGE_FILE_HEADER結構,這是一個20個字節的結構,其定義如下:
IMAGE_FILE_HEADER STRUCT
Machine WORD ? ;運行平臺
NumberOfSections WORD ? ; 文件的節數目
TimeDateStamp DWORD ? ; 文件創建日期和時間,它的數值是從
1969年12月31日下午4:00開始到創
建時間爲止的總秒數
PointerToSymbolTable DWORD ? ; 指向符號表(用於調試)
NumberOfSymbols DWORD ? ; 符號表中的符號數量(用於調試)
SizeOfOptionalHeader WORD ? ;IMAGE_OPTIONAL_HEADER32
結構的長度
Characteristics WORD ? ; 文件屬性
IMAGE_FILE_HEADER ENDS
各個字段的意義如註釋所示,其中元素SizeOfOptionalHeader的值始終爲e0h,表示可選頭的大小,e0h換算成十進制表示224,即可選頭的大小始終爲224個字節。