PE的组成
IMAGE_DOS_HEADER (64bytes) +0x3c定位PE标志
stub(填充区域)
IMAGE_NT_HEADERS32(4+20+224 = 248bytes)
PE标志 DWORD 4bytes
IMAGE_FILE_HEADER(20bytes)
+0x00 Machine WORD
+0x02 NumberOfSections WORD
+0x10 SizeOfOptionalHeader WORD 32BIT---E0 64BIT---F0
+0x12 Characteristics WORD exe(010f) dll(2102)
IMAGE_OPTIONAL_HEADER32(224bytes)
+0x00 Magic WORD PE32(010B) PE32+(020B 64位PE)
+0x02 MajorLinkerVersion BYTE
+0x03 MinorLinkerVersion BYTE
+0x04 SizeOfCode DWORD 所有代码区块的大小
+0x10 AddressOfEntryPoint DWORD(PE + 0x28 2行半 RVA + base = OEP)程序执行入口
+0x14 BaseOfCode DWORD(RVA PE + 0x2C)代码区块起始RVA
+0x18 BaseOfData DWORD(RVA PE + 0x30)数据区块起始RVA
+0x1C ImageBase DWORD 程序默认载入基地址 PE标志3行第二个4字节对应的值
+0x20 SectionAlignment DWORD 内存对齐值
+0x24 FileAlignment DWORD 文件对齐值
+0x38 SizeOfImage DWORD 映像载入内存后的总大小
+0x3C SizeOfHeaders DWORD DOS头+PE文件头+区块表的大小
IMAGE_DATA_DIRECTORY(16 * 8 = 128bytes)
+0x00 DWORD RVA 数据块的起始RVA
+0x04 DWORD Size
IMAGE_SECTION_HEADER (40Bytes 2行半)
+0x00 Name BYTES[8] 区块名字
+0x08 VirtualSize DWORD 区块的尺寸
+0x0C VirtualAddress DWORD 区块的RVA
+0x10 SizeOfRawData DWORD 在文件中对齐后的尺寸
+0x14 PointerToRawData DWORD 在文件中的偏移
+0x24 Characteristics DWORD 区块属性