逆向工程核心原理——第十三章

第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

动态链接库

原文地址:https://www.cnblogs.com/lex-shoukaku/p/13306341.html