天天看点

WINDOWS+PE权威指南读书笔记(2)PE文件结构

目录

PE文件结构

PE文件和数据结构简单理解:

16 位系统下的 PE 结构:

PE文件结构

PE文件和数据结构简单理解:

简单PE文件结构:

在 PE 格式中,每一个大的部分的对齐方式就是按照 200h 大小对齐的。

从文件开始到 0x03ff偏移处为 PE 的头部信息,其中记录了整个 PE 文件的头结构。

从偏移地址 0x0400 开始的 200h字节为指令字节码即代码段部分。

从偏移 0x0600 处开始的 200h 字节为程序中引入的函数描述部分,这些描述主要是为了让操作系统能在装载 PE 文件的同时,将相关的动态链接库也装入进程地址空间,实现代码的重用。

从偏移 0x0800 处开始的 200h 个字节则是程序中数据段 .data 定义的数据空间,其中包含了关于全局变量的定义。

WINDOWS+PE权威指南读书笔记(2)PE文件结构

简单的PE数据结构举例:

PE 的数据组织是大量的字节码与数据结构的有机融合。字节码是一些毫无意义的数字,而数据结构却为这些数字赋予了人类可以理解的精准含义。

WINDOWS+PE权威指南读书笔记(2)PE文件结构
WINDOWS+PE权威指南读书笔记(2)PE文件结构

同理举例理解,加载配置数据的数据结构定义为:

WINDOWS+PE权威指南读书笔记(2)PE文件结构
WINDOWS+PE权威指南读书笔记(2)PE文件结构

16 位系统下的 PE 结构:

为了保持与 16 位系统的兼容,在 PE 里依旧保留了 16 位系统下的标准可执行程序执行时所必需的文件头部 (DOS MZ 头) 和指令代码(DOS Stub ) 。

在 16 位系统下,PE 的四部分内容被重新组合成两部分----可以在 16 位系统下运行的DOS头和冗余数据。把 Windows 下的 PE 文件存储到 DOS 系统并运行,它就是DOS 系统下的一个 EXE 文件。

DOS 头分为两部分,DOS MZ 头和DOS Stub 〈即指令字节码)。大部分情况下,这些指令实现的功能都非常简单,根本不会涉及重定位信息。再往后的 PE 头和 PE 数据区可以看做是 16 位系统下的可执行文件的元余数据。

在 16 位系统下,PE 结构图示例:

WINDOWS+PE权威指南读书笔记(2)PE文件结构

DOS MZ 头:

加粗部分在 16 位系统下是没有定义的。由于其开始的标志字为“MZ”(Mark Zbikowski,他是 DOS 操作系统的开发者之一),所以称它为“DOS MZ 头”

WINDOWS+PE权威指南读书笔记(2)PE文件结构

16进制中的MZ头:

注意 这部分内容在源程序 HelloWorld.asm 中是找不到相应的定义语身的。因为 DOS MZ头部分的字节码 (包括DOS Stub 程序字节码) 的添加是由链接程序 link.exe 自动实现的。

WINDOWS+PE权威指南读书笔记(2)PE文件结构

16进制中的DOS Stub:

WINDOWS+PE权威指南读书笔记(2)PE文件结构

继续阅读