目录
一般概述
windows 下的可执行文件是一个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


1万+

被折叠的 条评论
为什么被折叠?



