2_文件头

2 文件头

MS-DOS 头

每一个 PE 文件是以一个 DOS 程序开始的, 有了它, 一旦程序在 DOS 下运行, DOS 才能识别出这是有效的执行体.

PE 文件的第一个字节起始于一个传统的 MS-DOS 头部, 被称作 IMAGE_DOS_HEADER. 这是一个结构体.

IMAGE_DOS_HEARER 结构

成员 e_magic 就是 Magic DOS signature MZ (4Dh 5Ah), 它是 DOS 可执行文件标记.

成员 e_lfanew 一个 32 位的指针, 指向 PE 文件头

其它成员可以自行查阅文档

PE 文件头

PE 文件头紧挨着 DOS stub

PE Header 是 PE 相关结构 NT 映像头 (IMAGE_NT_HEADER) 的简称, 里面包含着许多 PE 装载器用到的重要字段.

执行体在支持 PE 文件结构的操作系统中执行时, PE 装载器将从 IMAGE_DOS_HEADER 结构中的 e_lfanew 字段里找到 PE Header 的起始偏移量, 加上基地址就得到 PE 文件头的指针.

PNTHeader = ImageBase + dosHeader --> e_lfanew

IMAGE_NT_HEADER 结构

如果是没什么用的,东西, 那么 PE 加载器是不会管它的, 这时候我们就可以利用这些东西, 往里面加点我们自己的东西.

这个结构, 自行查阅.