pe通常由以下几部分组成,DOS文件、标准PE头、可选头、节表和相应的节。
DOS文件头:
_IMAGE_DOS_HEADER{
WORD e_magic; //MZ标记*,用于判断是否为可执行文件1
WORD e_cblp; //bytes on last page
WORD e_cp; //pages of file
WORD e_crlc; //relocations
WORD e_cparhdr;//size of header
WORD e_minalloc;//mininum memory
WORD e_maxalloc;//maxinum memory
WORD e_ss; //initial ss value
WORD e_sp; //initial sp value
WORD e_csum; //checksum
WORD e_ip; //initial ip value
WORD e_cs; //initial cs value
WORD e_lfarlc; //table offset
WORD e_ovno; //overlay number
WORD e_res[4]; //reserved words
WORD e_oemid; //oem identifier
WORD e_oeminfo; //oem information
WORD e_res2[10];//reserved words
DWORD e_lfanew;//PE头相对于文件的偏移,用于定位PE文件*1
}
标准PE头:
struct _IMAGE_FILE_HEADER{
WORD Machine;*程序运行的CPU型号:0x0任何处理器/0x14c 386及后续处理器1
WORD NumberOfSections;*文件中存在的节的总数,如果要新增节或合并节就需要修改这个值1
DWORD TimeDateStamp;*时间戳:文件的创建时间和操作系统的创建时间无关,编译器填写的
DWORD PointerToSymbolTable