1、MS-DOS MZ文件头(64个字节)
定位PE文件头开始位置,也用于PE文件合法性检测。最后四个字节(3C处):PE文件头开始位置
2、DOS Stub
一段小的DOS程序
3、PE header:由字串(Signature)、影像文件头(FileHeader)、可选映像头(OptionalHeader)三部分组成
(1)字串:四个字节,值为50h,45h,00h,00h (PE\0\0),为PE标记,以此识别给定文件是否是有效的PE文件。
(2)映像文件头:20个字节,包含了关于PE文件物理分布信息,比如节数目、可选文件头大小等
(3)可选文件头:定义了PE文件的很多关键信息
内存镜像加载地址、程序入口点、节在文件和内存中的对齐粒度、程序在内存中的镜像大小、文件头大小等
几个概念:
ImageBase:PE文件在内存中的优先装载地址(一般为400000H)
RVA地址:相对虚拟地址,相对内存中ImageBase的偏移地址
对齐粒度:扩展增量的最小值
一些关键字段,均为4个字节:
Address of Entry point:PE文件第一条指令的RVA,位置D8H
ImageBase:位置E4H
SectionAlignment:内存中节对齐的粒度。位置:E8H
FileAlignment:文件中节对齐粒度。位置ECH
(4)目录:16项*8字节
4、节表:紧挨PE header的一个结构数组
每一个节对应一个节表项:包含节名、节在文件和内存中的开始地址、长度、节属性
5、节:可执行文件的核心部分
PE文件一般都有多个“节”,常见:代码节、数据节、引入函数节、资源节、引出函数节、重定位节。