PE文件格式

本文详细介绍了PE(Portable Executable)文件格式,包括VA&RVA的概念,PE头的组成如DOS头、NT头、节区头,以及IAT和EAT。PE文件是Windows操作系统下的可执行文件格式,文章通过实例解析了PE头内部结构,如DOS头的e_magic和e_lfanew成员,以及NT头的FileHeader和OptionalHeader。此外,还探讨了PE文件在内存中的映射方式,以及如何从RVA转换为RAW地址。
摘要由CSDN通过智能技术生成

PE即Portable Executable,是Windows OS下使用的可执行文件格式。PE文件是指32位的可执行文件,亦称为PE32。64位的可执行文件称为PE+或PE32+,是PE文件的一种扩展形式。

PE文件种类如下表:


PE文件基本结构:


从DOS头至节区头是PE头部分,下面的节区合称PE体。文件的内容一般分为代码(.text)、数据(.data)、资源(.rsrc)节,分别保存。


VA&RVA:

文件中使用偏移(offset),内存中使用VA(Virtual Address虚拟地址)来表示位置。当文件加载到内存时,节区的大小和位置等会发生改变。

VA是指进程虚拟内存的绝对地址,RVA(Relative Virtual Address相对虚拟地址)是指从某个基准位置(ImageBase)开始的相对地址:RVA + ImageBase = VA

PE头内部信息大多以RVA形式存在,因为PE文件(主要是DLL)加载到进程虚拟内存的特定位置时,该位置可能已经加载了其他PE文件,此时必须通过重定位将其加载到其他空白位置。


PE头:

1、DOS头:

PE头最前面添加的IMAGE_DOS_HEADER结构体,用来扩展已有的DOS EXE头。该结构体大小为40(h)字节,其中有两个重要的成员e_magic和e_lfanew。

e_magic:DOS签名(4D5Z,即“MZ”)。

e_lfanew:指示NT头的偏移。

所有PE文件在开始部分(e_magic)都有DOS签名(“MZ”),e_lfanew值指向NT头所在位置(NT即IMAGE_NT_HEADERS)。

使用WinHex打开notepad查看:


PE文件开始即为“MZ”DOS签名,e_lfanew值为000000E0。


2、DOS存根:

DOS存根(stub)在DOS下方,是个可选项,由代码和数据混合而成,大小不固定(即使没有DOS存根,文件也可以正常运行)。

32位Windows OS不会运行其中的代码,但在DOS环境中可以运行。下面notepad示例是输出如图的字符串后便终止。



3、NT头:

IMAGE_NT_HEADERS结构体大小为F8,由3个成员组成:Signature签名结构体,其值为50450000h(“PE”00);IMAGE_FILE_HEADER文件头结构体;IMAGE_OPTIONAL_HEADER32可选头结构体。

(1)文件头:

IMAGE_FILE_HEADER结构体用于表示文件大致属性。其中有4个重要成员。


1.Machine:每个CPU都有唯一的MAchine码,如Intel 386为14C。

2.NumberOfSectio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值