PE 格式详解

目录

一般概述

 名字解释

PE 文件的模块介绍

 IMAGE_DOS_HEADER:

​IMAGE_NT_HEADERS:

节表


一般概述

windows 下的可执行文件是一个exe ,采用额是PE格式来描述一个执行文件,执行的时候被操作系统中的加载器加载到内存中。先展示一个exe 按照PE格式解析出来的结果。

ExE 按照PE格式解析图解

 名字解释

 下面的表格是从微软官方获取的名词解释:

名称 描述
属性证书 用于将可验证声明与映像关联的证书。 许多不同的可验证声明可以与文件相关联;其中最有用的一个声明是软件制造商的声明,此声明指示映像的消息摘要应该是什么。 消息摘要类似于检验和,只是很难伪造。 因此,很难修改文件以使其具有与原始文件相同的消息摘要。 可以使用公钥或私钥加密方案来验证声明是否是由制造商发出的。 本文档描述了有关属性证书的详细信息,但不允许将其插入到图像文件中。
日期/时间戳 在 PE 或 COFF 文件中的多个位置用于不同目的的戳记。 在大多数情况下,每个标记的格式与 C 运行时库中的时间函数使用的格式相同。 有关异常,请参见调试类型中 IMAGE_DEBUG_TYPE_REPRO 的说明。 如果戳记值为 0 或 0xFFFFFFFF,则它不表示实际或有意义的日期/时间戳。
文件指针 链接器(对于目标文件)或加载器(对于映像文件)处理之前文件本身中项的位置。 换句话说,这是存储在磁盘上的文件内的位置。
链接器 随 Microsoft Visual Studio 一起提供的链接器引用。
对象文件 作为链接器输入提供的文件。 链接器生成一个映像文件,而此映像文件又用作加载器的输入。 术语“目标文件”并不一定意味着与面向对象的编程有任何联系。
已保留,必须为 0 字段的描述,指示该字段的值对于生成器来说必须为零,而使用者必须忽略该字段。
相对虚拟地址 (RVA) 在映像文件中,这是项目加载到内存并从中减去映像文件基地址后的地址。 项目的 RVA 几乎总是与其在磁盘上文件中的位置(文件指针)不同。
在目标文件中,RVA 的意义不大,因为未分配内存位置。 在这种情况下,RVA 将是一个段内的地址(此表后面将进行描述),稍后在链接期间会对此地址应用重定位。 为简单起见,编译器应只将每个部分中的第一个 RVA 设置为零。
section PE 或 COFF 文件中代码或数据的基本单位。 例如,目标文件中的所有代码都可以组合在单个部分中,或者(取决于编译器行为)每个函数都可以占用自己的部分。 部分越多,文件开销就越大,但链接器能够更有选择性地链接代码。 一个部分类似于 Intel 8086 体系结构中的段。 一个部分中的所有原始数据都必须连续加载。 此外,映像文件可以包含多个具有特殊用途的部分,例如 .tls 或 .reloc 。
虚拟地址 (VA) 与 RVA 相同,只不过不减去映像文件的基址。 该地址称为 VA,因为 Windows 会为每个进程创建一个独立于物理内存的不同 VA 空间。 对于几乎所有目的,VA 应只被视为一个地址。 VA 不如 RVA 那么可预测,因为加载器可能不会在其首选位置加载映像。

PE 文件的模块介绍

下面我们来一个个解析PE文件的每一个模块:

 IMAGE_DOS_HEADER:

DOS头的作用是兼容MS-DOS操作系统中的可执行文件,对于32位PE文件来说,DOS所起的作用就是显示一行文字,提示用户:我需要在32位windows上才可以运行。

typedef s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值