第13章 PE文件格式
书本上最开头,说到本章不仅会有PE文件格式的知识,还有进程、内存、DLL的相关内容。
什么事pe文件:
pe文件是指windows操作系统下使用的可执行文件格式。
pe文件包括:
种类 | 主扩展名 |
---|---|
可执行文件 | EXE、SCR |
库系列 | DLL、OCX、CPL、DRV |
驱动程序 | SYS、VXD |
对象文件系列 | OBJ |
注解:
PE文件的基本结构:
现在我们对上面的名词进行解释和补充:
1.VA&RVA
VA=进程虚拟内存的绝对地址。
RVA(Relative Virtual Address)=相对虚拟地址,是指从某个基准位置(ImageBase)开始的相对位置。
VA=RVA+ImageBase
2 DOS头
这是一个结构体,其中最重要的是两个:
e_magic:DOS签名(4D 5A=>ascii“MZ”)
e_lfanew:指示NT头的偏移
所有PE文件在开始部分都会有DOS签名(“MZ”)
3 NT头
NT头第一个成员也是签名:50450000H(“PE”00)
NT文件头中有四个重要的:
1.Machine:
每个CPU都有唯一的Machine码。
2.NumberOfSections:
用于指出文件中存在的节区数量。
3.SizeOfIptionalHeader:
用来指出IMAGE_OPTIONAL_HEADER32结构体的长度。
4.Characteristics:
用于标识文件的属性,文件是否是可运行的状态、是否是DLL文件等信息。
NT可选头以下的较为重要:
1.Magic:
当位32结构体时,Magic为18B,当位64结构体时,Magic为20B.
2.AddressOfRntryPoint:
持有EP的RVA值,该值值出程序最先执行的代码起始地址。
3.ImageBase:
它指出文件优先装入地址。
4.SectionAlignment,FileAlignment:
PE 文件的Body部分划分为若干节区,用于存放不同类别的数据。
5.SizeOfImage:
PE文件加载到内存时,它制定了PE Image再虚拟内存中所占空间大小
6.SizeOfHeader:
用来指出整个PE头的大小。
7.Subsystem:
用来区分系统驱动文件和普通可执行文件。
8.NumberOfTvaAndSizes:
用来指定datadirectory
9.DataDirectory:
由IMAGE_DATA_DIRECTORY结构体组成的数组。
4.节区头
节选头中定义了各个节区的属性,比如我们前面提到的.code、.data、.res。
5.RVA to RAW
RAW = TVA - VirtualAddress + PointerToRawData
6.IAT
IAT就是导入表
7.DLL
动态链接库