PE文件格式
PE分析文件格式(helloword)

PE分析文件格式(helloword)Dump of file H:\桌面\PE文件学习\PE 文件格式启发式学习\hello.exeFile HeaderMachine: 014CNumber of Sections: 0004TimeDateStamp: 48202B13PointerT oSymbolTable: 00000000NumberOfSymbols: 00000000SizeOfOptionalHeader: 00E0Characteristics: 010FRELOCS_STRIPPEDEXECUTABLE_IMAGELINE_NUMS_STRIPPEDLOCAL_SYMS_STRIPPED32BIT_MACHINEOptional HeaderMagic 010Blinker versio 5.12size of code 200size of initialized data 800size of uninitialized data 0entrypoint RVA 1000base of code 1000base of data 2000image base 400000section align 1000file align 200required OS version 4.00image version 0.00subsystem version 4.00size of image 43A0size of headers 800checksum 0Subsystem 0002stack reserve size 100000stack commit size 1000heap reserve size 100000heap commit size 1000RVAs & sizes 10Data DirectoryEXPORT rva: 00000000 size: 00000000 IMPORT rva: 00002010 size: 0000003C RESOURCE rva: 00004000 size: 000003A0 EXCEPTION rva: 00000000 size: 00000000 SECURITY rva: 00000000 size: 00000000 BASERELOC rva: 00000000 size: 00000000 DEBUG rva: 00000000 size: 00000000 COPYRIGHT rva: 00000000 size: 00000000 GLOBALPTR rva: 00000000 size: 00000000 TLS rva: 00000000 size: 00000000LOAD_CONFIG rva: 00000000 size: 00000000 BOUND_IMPORT rva: 00000000 size: 00000000 IAT rva: 00002000 size: 00000010unused rva: 00000000 size: 00000000 unused rva: 00000000 size: 00000000unused rva: 00000000 size: 00000000Section Table01 .text virtSize: 00000028 VirtAddr: 00001000 raw data offs: 00000800 raw data size: 00000200 relocation offs: 00000000 relocations: 00000000 line # offs: 00000000 line #`s: 00000000 characteristics: 60000020CODE MEM_EXECUTE MEM_READ02 .rdat VirtSize: 00000092 VirtAddr: 00002000 raw data offs: 00000A00 raw data size: 00000200 relocation offs: 00000000 relocations: 00000000 line # offs: 00000000 line #`s: 00000000 characteristics: 40000040INITIALIZED_DATA MEM_READ03 .data VirtSize: 00000034 VirtAddr: 00003000 raw data offs: 00000C00 raw data size: 00000200 relocation offs: 00000000 relocations: 00000000 line # offs: 00000000 line #`s: 00000000 characteristics: C0000040INITIALIZED_DATA MEM_READ MEM_WRITE04 .rsrc VirtSize: 000003A0 VirtAddr: 00004000 raw data offs: 00000E00 raw data size: 00000400 relocation offs: 00000000 relocations: 00000000 line # offs: 00000000 line #`s: 00000000characteristics: 40000040 INITIALIZED_DATA MEM_READImports Table:user32.dllHint/Name Table: 00002054 TimeDateStamp: 00000000 ForwarderChain: 00000000 First thunk RVA: 00002008 Ordn Name413 MessageBoxAkernel32.dllHint/Name Table: 0000204C TimeDateStamp: 00000000 ForwarderChain: 00000000 First thunk RVA: 00002000 Ordn Name128 ExitProcess。
PE文件格式详解

PE文件格式详解(一)基础知识什么是PE文件格式:我们知道所有文件都是一些连续(当然实际存储在磁盘上的时候不一定是连续的)的数据组织起来的,不同类型的文件肯定组织形式也各不相同;PE文件格式便是一种文件组织形式,它是32位Window系统中的可执行文件EXE以及动态连接库文件DLL的组织形式。
为什么我们双击一个EXE文件之后它就会被Window运行,而我们双击一个DOC文件就会被Word打开并显示其中的内容;这说明文件中肯定除了存在那些文件的主体内容(比如EXE文件中的代码,数据等,DOC 文件中的文件内容等)之外还存在其他一些重要的信息。
这些信息是给文件的使用者看的,比如说EXE文件的使用者就是Window,而DOC文件的使用者就是Word。
Window可以根据这些信息知道把文件加载到地址空间的那个位置,知道从哪个地址开始执行;加载到内存后如何修正一些指令中的地址等等。
那么PE文件中的这些重要信息都是由谁加入的呢?是由编译器和连接器完成的,针对不同的编译器和连接器通常会提供不同的选项让我们在编译和联结生成PE文件的时候对其中的那些Window需要的信息进行设定;当然也可以按照默认的方式编译连接生成Window中默认的信息。
例如:WindowNT默认的程序加载基址是0x40000;你可以在用VC连接生成EXE文件的时候使用选项更改这个地址值。
在不同的操作系统中可执行文件的格式是不同的,比如在Linux上就有一种流行的ELF格式;当然它是由在Linux上的编译器和连接器生成的,所以编译器、连接器是针对不同的CPU架构和不同的操作系统而涉及出来的。
在嵌入式领域中我们经常提到交叉编译器一词,它的作用就是在一种平台下编译出能在另一个平台下运行的程序;例如,我们可以使用交叉编译器在跑Linux的X86机器上编译出能在Arm上运行的程序。
程序是如何运行起来的:一个程序从编写出来到运行一共需要那些工具,他们都对程序作了些什么呢?里面都涉及哪些知识需要学习呢?先说工具:编辑器-》编译器-》连接器-》加载器;首先我们使用编辑器编辑源文件;然后使用编译器编译程目标文件OBJ,这里面涉及到编译原理的知识;连接器把OBJ文件和其他一些库文件和资源文件连接起来生成EXE文件,这里面涉及到不同的连接器的知识,连接器根据OS的需要生成EXE文件保存着磁盘上;当我们运行EXE文件的时候有Window的加载器负责把EXE文件加载到线性地址空间,加载的时候便是根据上一节中说到的PE文件格式中的哪些重要信息。
深入理解Win32PE文件格式

深⼊理解Win32PE⽂件格式深⼊理解 Win32 PE ⽂件格式Matt Pietrek这篇⽂章假定你熟悉C++和Win32。
概述理解可移植可执⾏⽂件格式(PE)可以更好地了解操作系统。
如果你知道DLL和EXE中都有些什么东西,那么你就是⼀个知识渊博的程序员。
这⼀系列⽂章的第⼀部分,讨论最近这⼏年PE格式所发⽣的变化。
这次更新后,作者讨论了PE格式如何适应于⽤.NET开发的应⽤程序,包括PE节,RVA,数据⽬录,以及导⼊函数。
附录中包含了相关的映像头结构以及它们的描述。
很早以前,我为微软系统期刊(现在叫做MSDN)写了⼀篇⽂章。
那篇⽂章“Peering Inside the PE: A Tour of the Win32 Portable Executable File Format”⽐我所期望的更受⼈欢迎。
直到现在,我仍然能收到使⽤那篇⽂章的⼈(甚⾄Microsoft⾥的⼈)的来信,那篇⽂章在MSDN中仍然能够找到。
不幸的是,那篇⽂章中存在⼀些问题。
这⼏年Win32发⽣了很⼤变化,那篇⽂章已经过时了。
从这个⽉开始我将在⼀篇分成两部分的⽂章中改正那些问题。
你也许会奇怪为什么应该关⼼可执⾏⽂件的格式呢。
答案还和过去⼀样:⼀个操作系统可执⾏⽂件的格式和数据结构揭⽰了这个底层操作系统的许多东西。
通过理解EXE和DLL中到底有些什么,你会成为⼀个知识更加渊博的程序员。
当然,你从微软的规范中也能学到我所告诉你的许多东西。
然⽽,微软的规范为了涵盖全⾯⽽牺牲了可读性。
⽽我这篇⽂章的焦点主要就是讨论 PE ⽂件的格式,填补了不适合出现在正式的说明规范中的部分。
另外,在这篇⽂章中也有⼀些在任何微软官⽅⽂档中都没有的好东西。
Bridging the Gap先给出⼏个⾃从1994年我写了那篇⽂章之后 PE ⽂件格式都发⽣了哪些变化的例⼦。
由于16位的 Windows 已经成为历史,所以没有必要再和 Win16 可执⾏⽂件格式进⾏⽐较了。
pe格式化方法(1)

pe格式化方法PE格式(Portable Executable format)是Windows操作系统下的一种可执行文件的格式标准,它定义了可执行文件、动态链接库(DLL)和驱动程序等二进制文件的结构和标识方法。
本文将介绍PE格式化的基本原理和方法,并举例说明。
一、PE格式基本原理1. PE格式定义:PE格式是一种COFF(Common Object File Format)文件格式的变体,用于描述32位和64位Windows可执行文件的结构和组织。
2. 文件头部分:PE格式文件的开头是一个固定大小的文件头(File Header),用于描述整个PE文件的组织结构和属性信息,如文件类型、目标体系结构、节表位置等。
3. 节部分:紧随文件头部分的是节(Section)部分,它描述了PE格式文件中各个段或区块的属性和内容,如代码段、数据段、资源段等。
4. 数据目录:PE格式文件中包含了多个数据目录(Data Directory),每个数据目录描述了PE文件中某个特定功能的位置和大小信息,如导入表、导出表、资源表等。
1. 创建空白PE文件:使用合适的开发工具,如Visual Studio等,新建一个空白的PE 文件。
2. 定义文件头:根据所需的文件类型和目标体系结构,填写文件头部分的属性信息。
如指定文件类型为可执行文件(Executable)、目标体系结构为32位或64位等。
3. 定义节表:根据需求,定义PE文件中的各个节的属性和内容,如代码段、数据段、资源段等。
可以使用合适的工具,如Hex编辑器等,手动修改节表。
4. 填充数据目录:根据PE格式的规定,将所需的功能的位置和大小信息填写入数据目录表中,如导入表、导出表、资源表等。
5. 填充节内容:根据需求,将代码、数据和资源等内容填写入相应的节中。
可以使用合适的工具,如文本编辑器等,手动修改和填充节内容。
6. 调整文件大小:根据实际内容大小,调整整个PE文件的大小,确保文件大小与实际内容相符。
PE文件结构及其加载机制

PE⽂件结构及其加载机制⼀、PE⽂件结构PE即Portable Executable,是win32环境⾃⾝所带的执⾏体⽂件格式,其部分特性继承⾃Unix的COFF(Common Object File Format)⽂件格式。
PE表⽰该⽂件格式是跨win32平台的,即使Windows运⾏在⾮Intel的CPU上,任何Win32平台的PE装载器也能识别和使⽤该⽂件格式的⽂件。
所有Win32执⾏体(除了VxD和16位的DLL)都使⽤PE⽂件格式,如EXE⽂件、DLL⽂件等,包括NT的内核模式驱动程序(Kernel Mode Driver)。
PE⽂件⾄少包含两个段,即数据段和代码段。
Windows NT 的应⽤程序有9个预定义的段,分别为 .text 、.bss 、.rdata 、.data 、.pdata 和.debug 段,这些段并不是都是必须的,当然,也可以根据需要定义更多的段(⽐如⼀些加壳程序)。
在应⽤程序中最常出现的段有以下6种:.执⾏代码段,通常 .text (Microsoft)或 CODE(Borland)命名;.数据段,通常以 .data 、.rdata 或 .bss(Microsoft)、DATA(Borland)命名;.资源段,通常以 .rsrc命名;.导出表,通常以 .edata命名;.导⼊表,通常以 .idata命名;.调试信息段,通常以 .debug命名;PE⽂件的结构在磁盘和内存中是基本⼀样的,但在装⼊内存中时⼜不是完全复制。
Windows装载器在装载的时候仅仅建⽴好虚拟地址和PE ⽂件之间的映射关系,只有真正执⾏到某个内存页中的指令或访问某⼀页中的数据时,这个页才会被从磁盘提交到物理内存。
但因为装载可执⾏⽂件时,有些数据在装⼊前会被预先处理(如需要重定位的代码),装⼊以后,数据之间的相对位置也可能发⽣改变。
因此,⼀个节的偏移和⼤⼩在装⼊内存前后可能是完全不同的。
..PE的基本结构就是这样了。
PE文件格式

WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
么正确的开始地址是0x401560。如果可执行程序调入0x100000处,则开始地址为0x101560。
因为PE文件的每一个段不必按同样的边界对齐方式调入,因此RVA地址的计算变得比较复
杂。例如,在文件中每一个段往往按512个字节的方式对齐,而在内存中可能以4096字节的方
式对齐。这方面的介绍可见下面的“SectionAlignment”、“FileAlignment”。举个例子,
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number
WORD e_cblp; // Bytes on last page of file
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
三、文件头(File Header)
通过DOS头,你可以找到一个叫做IMAGE_FILE_HEADER的结构,如下;下面我分别介绍一
下。
typedef struct _IMAGE_FILE_HEADER {
中只有大约100个字节的代码,只输出一个诸如“this program needs windows NT ”之类的
信息。
你可以通过一个叫做IMAGE_DOS_HEADER的结构来识别一个合法的DOS头。这个结构的头两
个字节一定是“MZ”(#define IMAGE_DOS_SIGNATURE "MZ")。怎么才能找到PE开始的标志呢
WindowsPE文件格式

WindowsPE⽂件格式在PE⽂件头之前理论Windows的PE(Portable Executable)⽂件有两个头,⼀个是是Windows头,⼀个是DOS头。
在⽂件的最开始会有⼀段DOS的EXE⽂件头,来说明这个程序不可以在DOS环境下运⾏。
我们需要在DOS头+3Ch处,会有⼀个4字节的指针指向windows头。
根据+3Ch处的值,定位到Windows⽂件头可以看到"PE"两个字节,Windows头就从此处开始。
这也就是Windows EXE⽂件经常被称为PE⽂件的原因。
实践1. 在xp环境下,⽤QuickView打开⼀个EXE⽂件,观察其头部。
在00h处有两个字节4D 5A表⽰这是⼀个DOS头。
在4Eh处,有⼀个字符串This program cannot be run in DOS mode. 表明这不是⼀个DOS⽂件在3C处,有⼀个四字节指针,其值为000000D0h,颜⾊标黄,指向windows头2. 查看⽂件地址D0处的值可以看到此处的两个字节为50 45即“PE”,表⽰这个EXE⽂件是⼀个PE⽂件,从这两个字节开始才是PE的⽂件头。
PE⽂件头背景知识要了解PE⽂件头的具体内容,我们需要对Windows的内存管理,⽂件存储有⼀定的了解。
接下来做简要的说明,想要了解更详细的内容可以去学习操作系统的相关知识。
Windows通过分段以及分页两种机制管理内存和实现进程的隔离及保护。
以下说明会涉及到⼀些寄存器和⽐较抽象的概念,不懂也没有关系。
只需要知道结论,*⼀个进程的虚拟地址会经过⼀些转换成为真正的物理地址. *进程之间的虚拟地址可以相同,但相同的虚拟地址会转化成不同的物理地址。
在Windows系统中,为了向下兼容,保留了分段(section)的的机制,但是CS,DS,SS这些段地址在GDT表中的值全部为0,所以经过分段后的逻辑地址(logical address)与线性地址(linear address)是完全⼀致的,在此处不⽤过多理会。
PE文件格式(内容详细)

简介
在DOS环境下有四种基本的可执行文件格式
批处理文件,以.BAT结尾的文件
设备驱动文件,是以.SYS结尾的文件,如CONFIG.SYS
COM文件,是以.COM结尾的纯代码文件
• 没有文件头部分,缺省情况下总是从0x100H处开始执行, 没有重定位项,所有代码和数据必须控制在64K以内
在Win32位平台可执行文件格式:可移植的可执行文件 (Portable Executable File)格式,即PE格式。MZ文件头 之后是一个以“PE”开始的文件头
安装在硬盘上的程序没运行-静态 加载到内存-动态
EXE文件的格式
MZ文件格式-Mark Zbikowski
.EXE文件由三部分构成:文件头、重定位表和二进制代码 允许代码、数据、堆栈分别处于不同的段,每一段都可以是64KB.
EXE文件的格式
PE文件格式
一般来说,病毒往往先于HOST程序获得控制权。运行 Win32病毒的一般流程示意如下:
①用户点击或系统自动运行HOST程序; ②装载HOST程序到内存;
③通过PE文件中的AddressOfEntryPoint+ImageBase,
定位第一条语句的位置(程序入口); ④从第一条语句开始执行(这时执行的其实是病毒代码); ⑤病毒主体代码执行完毕,将控制权交给HOST程序原来的
病毒通过“MZ”、“PE”这两个标志,初步判断当前程序 是否是目标文件——PE文件。如果要精确校验指定文件是 否为一有效PE文件,则可以检验PE文件格式里的各个数 据结构,或者仅校验一些关键数据结构。大多数情况下, 没有必要校验文件里的每一个数据结构,只要一些关键数 据结构有效,就可以认为是有效的PE文件
PE的意思就是Portable Executable(可移植、可执 行),它是Win32可执行文件的标准格式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
地址(DE C)地址(HEX)整体名称整体名称下级名称下级结构下级结构00 11 22 33 44 5566 77 88 99 10A 11B 12C 13D 14E 15F 1610 1711 1812 1913 2014 2115 2216 2317 2418 2519 261A 271B 3624 3725 3826 3927 603C 613D 623E 633F 208D0 209D1 210D2 211D3 212D4 213D5 214D6 215D7 216D8 217D9 218DA 219DB 220DC 221DD 222DEe_crlce_cparhdre_minalloce_magice_cblpe_cpe_maxalloce_sse_spe_csume_ipe_cse_lfarlce_ovnoe_oemide_oeminfoNumberOfSectionsTimeDateStampPointerToSymbolTableSignaturee_lfanewMachineMS-DOS头部IMAGE_DOS_HEADERSignature文件头IMAGE_FILE_HEADERMS-DOS头部IMAGE_DOS_HEADERDOS STUB223DF 224E0 225E1 226E2 227E3 228E4 229E5 230E6 231E7 232E8 233E9234EA MajorLink erVersion235EB MinorLink erVersion236EC 237ED 238EE 239EF 240F0 241F1 242F2 243F3 244F4 245F5 246F6 247F7 248F8 249F9 250FA 251FB 252FC 253FD 254FE 255FF 256100 257101 258102 259103 260104 261105 262106 263107 264108 265109 26610A 26710B 26810C 26910D 27010E 27110F 272110 273111 274112SymbolTableNumberOfSymbolsSizeOfOptionalHeadCharacteristicsBaseOfCodeBaseOfDataImageBaseMagicSizeOfCodeSizeOfInitializedDataSizeOfUninitializedDataAddressOfEntryPointSectionAlignmentFileAlignmentMajorOperatingSystMinorOperatingSyst IMAGE_FILE_HEADER27511327611427711527811627911728011828111928211A 28311B 28411C 28511D 28611E 28711F 28812028912129012229112329212429312529412629512729612829712929812A 29912B 30012C 30112D 30212E 30312F 30413030513130613230713330813430913531013631113731213831313931413A 31513B 31613C 31713D 31813E 31913F 320140321141322142323143324144325145326146327147328148VirtualAddress IMAGE_EXPORT_D IRECTORYMinorOper atingSyst MajorImag eVersion MinorImag eVersion MajorSubs ystemVers MinorSubs ystemVers Win32Vers ionValueSizeOfImageSizeOfHea dersCheckSumSubsystem DllCharac teristics SizeOfSta ckReserveSizeOfSta ckCommitSizeOfHea pReserveSizeOfHea pCommitLoaderFlags NumberOfR vaAndSizesPE文件头Signature IMAGE_FIL E_HEADER IMAGE_OPT IONAL_HEAIMAG7E_DIRECT ORY_ENTRY_EXP329149 33014A 33114B 33214C 33314D 33414E 33514F 336150 337151 338152 339153 340154 341155 342156 343157 344158 345159 34615A 34715B 34815C 34915D 35015E 35115F 352160 353161 354162 355163 356164 357165 358166 359167 360168361169 36216A 36316B 36416C 36516D 36616E 36716F 368170 369171 370172 371173 372174 373175 374176 375177 376178 377179 37817A 37917B 38017C 38117D 38217EVirtualAddressSizeVirtualAddressIMAGE_BASE_RELOCATIONSizeVirtualAddressIMAGE_DEBUG_DIRECTORYSizeVirtualAddressIMAGE_EXPORT_DIRECTORYSizeVirtualAddressIMAGE_IMPORT_DESCRIPTORSizeVirtualAddressIMAGE_RESOURCE_DIRECTORYSizeSizeA_DIRECTOVirtualAddress 选择文件头IMAGE_OPTIONAL_HEADERPE文件头SignatureIMAGE_FILE_HEADERIMAGE_OPTIONAL_HEADERIMAG7E_DIRECTORY_ENTRY_EXPORT1IMAGE_DIRECTORY_ENTRY_IMPORT2IMAGE_DIRECTORY_ENTRY_RESOURCE3IMAGE_DIRECTORY_ENTRY_EXCEPTION4IMAGE_DIRECTORY_ENTRY_SECURITY5IMAGE_DIRECTORY_ENTRY_BASERELOC6IMAGE_DIRECTORY_ENTRY_DEBUG38317F 384180 385181 386182 387183 388184 389185 390186 391187 392188 393189 39418A 39518B 39618C 39718D 39818E 39918F 400190 401191 402192 403193 404194 405195 406196 407197 408198 409199 41019A 41119B 41219C 41319D 41419E 41519F 4161A0 4171A1 4181A2 4191A3 4201A44211A5 4221A6 4231A7 4241A8 4251A9 4261AA 4271AB 4281AC 4291AD 4301AE 4311AF 4321B0 4331B1 4341B2 4351B3 4361B4SizeVirtualAddressSizeVirtualAddressSizeVirtualAddressSizeVirtualAddressVirtualAddressVirtualAddressSizeIMAGE_DATA_DIRECTORYDataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]16个IMAGE_DATA_DIRECTORY11IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT12IMAGE_DIRECTORY_ENTRY_IAT13IMAGE_DIRECTORY_ENTRY_DELAY_IMPORTSizeVirtualAddressSize8IMAGE_DIRECTORY_ENTRY_GLOBALPTR9IMAGE_DIRECTORY_ENTRY_TLS10IMAGE_DIRECTORY_ENTRY_LOAD_CONFIGIMAGE_DIRECTORY_ENTRY_DEBUG7IMAGE_DIRECTORY_ENTRY_ARCHITECTU4371B5 4381B6 4391B7 4401B8 4411B9 4421BA 4431BB 4441BC4451BD 4461BE 4471BF 4481C0 4491C1 4501C2 4511C3 4521C4 4531C5 4541C6 4551C7 4561C8 4571C9 4581CA 4591CB 4601CC 4611CD 4621CE 4631CF 4641D0 4651D1 4661D2 4671D3 4681D4 4691D5 4701D6 4711D7 4721D8 4731D9 4741DA 4751DB 4761DC 4771DD 4781DE 4791DF 4801E0 4811E1 4821E2 4831E3 4841E4 4851E5 4861E6 4871E7 4881E8 4891E9 4901EASizeSizeVirtualAddress15未使用SizeOfRawDataIMAGE_SECTION_HEADERName[IMAGE_SIZEOF_SHORT_NAME]8个字节union {DWORDPhysicalAddress;VirtualAddressPointerToRawDataPointerToRelocationsPointerToLinenumbersNumberOfRelocationNumberOfLinenumberIMAGE_DIRECTORY_ENTRY_DELAY_IMPORT14IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR未使用IMAGE_SECTION_HEADER4911EB 4921EC 4931ED 4941EE 4951EF 4961F0 4971F1 4981F2 4991F3 5001F4 5011F5 5021F6 5031F7 5041F8 5051F9 5061FA 5071FB 5081FC 5091FD 5101FE 5111FF 512200NumberOfL inenumber Character istics描述典型值及说明M Z208000P E00魔术数字"MZ"文件最后页的字节数文件页数 重定义元素个数文件最后页的字节数所需的最小附加段所需的最大附加段初始的SS值(相对偏移量)初始的SP值校验和初始的IP值初始的CS值(相对偏移量)重分配表文件地址重分配表文件地址OEM标识符(相对e_oeminfo)OEM信息新exe头部的文件地址PE头部标识"PE\0\0"该文件运行所要求的CPU。