一.dos头
PE文件结构:DOS头+PE头+节表+.data/.rdata/.text。
DOS头中声明用的寄存器(我们可以看到e_ss、e_sp、e_ip、e_cs还是16位的寄存器),所以在32位/64为系统中用到的只有两个成员了(第一个和最后一个): ①e_magic:判断一个文件是不是PE文件; ②e_lfanew:相对于文件首的偏移量,用于找到PE头;
编辑
64字节(共4行)的DOS头,第一个成员2个字节是可执行文件的标志信息;最后一个成员4字节是PE头的偏移地址为00000100H
二.PE头
根据DOS头的e_lfanew成员我们就可以找到NT头,NT头的第一个成员是 ”PE\0\0”(0X50 0X45 0X00 0X00四字节的签名,可以在上图00000100H地址处观察)。
后两个成员则分别是标准PE头(_IMAGE_FILE_HEADER)
首先四字节是NT第一个签名成员“PE\0\0”。接着便是2字节的CPU平台信息:014C,即X86平台
第二个成员区块数量0008H即8个块;
第三个成员为时间戳:56BCE029H(即十进制1455218729),转换成北京时间为2016-02-12 03:25:29(时间戳在线转换)
第四个和第五个成员各占4字节且均为0;
第六个成员占2字节为默认值E0H(即可选PE头的大小为224字节);
最后一个属性成员占2字节为“818F”。
可选PE头(_IMAGE_OPTIONAL_HEADER)。
可选PE头紧接着标准PE头,其大小在标准PE头中给出:大小为E0H即224字节
编辑
4个PE首地址字节后数20个字节为标准PE头,在标准PE头后数224个字节是可选PE头