没有合适的资源?快使用搜索试试~ 我知道了~
首页PE文件结构详解--(完整版).pdf
PE文件结构详解--(完整版).pdf
需积分: 38 61 下载量 60 浏览量
更新于2023-03-03
评论 1
收藏 1.3MB PDF 举报
PE文件是portable File Format(可移植文件)的简写,我们比较熟悉的DLL和exe文件都是PE文件。了解PE文件格式有助于加深对操作系统的理解,掌握可执行文件的数据结构机器运行机制,对于逆向破解,加壳等安全方面方面的同学极其重要。接下来我将通过接下来几篇详细介绍PE文件的格式。
资源详情
资源评论
资源推荐
PE 文件结构详解--(完整版)
2018 年 11 月 30 日 16:53:12 adam001521 阅读数 1439
(一)基本概念
PE(Portable Execute)文件是 Windows 下可执行文件的总称,常见的有 DLL,EXE,
OCX,SYS 等,事实上,一个文件是否是 PE 文件与其扩展名无关,PE 文件可以是任何
扩展名。那 Windows 是怎么区分可执行文件和非可执行文件的呢?我们调用
LoadLibrary 传递了一个文件名,系统是如何判断这个文件是一个合法的动态库呢?这就
涉及到 PE 文件结构了。
PE 文件的结构一般来说如下图所示:从起始位置开始依次是 DOS 头,NT 头,节表以及
具体的节。
DOS 头是用来兼容 MS-DOS 操作系统的,目的是当这个文件在 MS-DOS 上运行时提示
一段文字,大部分情况下是:This program cannot be run in DOS mode.还有一个目
的,就是指明 NT 头在文件中的位置。
NT 头包含 windows PE 文件的主要信息,其中包括一个‘PE’字样的签名,PE 文件头
(IMAGE_FILE_HEADER)和 PE 可选头(IMAGE_OPTIONAL_HEADER32),头部的
详细结构以及其具体意义在 PE 文件头文章中详细描述。
节表:是 PE 文件后续节的描述,windows 根据节表的描述加载每个节。
节:每个节实际上是一个容器,可以包含代码、数据等等,每个节可以有独立的内存权
限,比如代码节默认有读/执行权限,节的名字和数量可以自己定义,未必是上图中的三
个。
当一个 PE 文件被加载到内存中以后,我们称之为“映象”(image),一般来说,PE
文件在硬盘上和在内存里是不完全一样的,被加载到内存以后其占用的虚拟地址空间要
比在硬盘上占用的空间大一些,这是因为各个节在硬盘上是连续的,而在内存中是按页
对齐的,所以加载到内存以后节之间会出现一些“空洞”。
因为存在这种对齐,所以在 PE 结构内部,表示某个位置的地址采用了两种方式,针对在
硬盘上存储文件中的地址,称为原始存储地址或物理地址表示距离文件头的偏移;另外
一种是针对加载到内存以后映象中的地址,称为相对虚拟地址(RVA),表示相对内存
映象头的偏移。
然而 CPU 的某些指令是需要使用绝对地址的,比如取全局变量的地址,传递函数的地址
编译以后的汇编指令中肯定需要用到绝对地址而不是相对映象头的偏移,因此 PE 文件会
建议操作系统将其加载到某个内存地址(这个叫基地址),编译器便根据这个地址求出
代码中一些全局变量和函数的地址,并将这些地址用到对应的指令中。例如在 IDA 里看
上去是这个样子:
这种表示方式叫做虚拟地址(VA)。
也许有人要问,既然有 VA 这么简单的表示方式为什么还要有前面的 RVA 呢?因为虽然
PE 文件为自己指定加载的基地址,但是 windows 有茫茫多的 DLL,而且每个软件也有
自己的 DLL,如果指定的地址已经被别的 DLL 占了怎么办?如果 PE 文件无法加载到预
期的地址,那么系统会帮他重新选择一个合适的基地址将他加载到此处,这时原有的 VA
就全部失效了,NT 头保存了 PE 文件加载所需的信息,在不知道 PE 会加载到哪个基地址
之前,VA 是无效的,所以在 PE 文件头中大部分是使用 RVA 来表示地址的,而在代码中
是用 VA 表示全局变量和函数地址的。那又有人要问了,既然加载基址变了以后 VA 都失
效了,那存在于代码中的那些 VA 怎么办呢?答案是:重定位。系统有自己的办法修正这
些值,到后续重定位表的文章中会详细描述。既然有重定位,为什么 NT 头不能依靠重定
位采用 VA 表示地址呢(十万个为什么)?因为不是所有的 PE 都有重定位,早期的 EXE
就是没有重定位的。
我们都知道 PE 文件可以导出函数让其他的 PE 文件使用,也可以从其他 PE 文件导入函
数,这些是如何做到的?PE 文件通过导出表指明自己导出那些函数,通过导入表指明需
要从哪些模块导入哪些函数。导入和导出表的具体结构会在单独的文章中详细解释。
(二)可执行文件头
在 PE 文件结构详解(一)基本概念里,解释了一些 PE 文件的一些基本概念,从这篇开
始,将详细讲解 PE 文件中的重要结构。
了解一个文件的格式,最应该首先了解的就是这个文件的文件头的含义,因为几乎所有
的文件格式,重要的信息都包含在头部,顺着头部的信息,可以引导系统解析整个文件。
所以,我们先来认识一下 PE 文件的头部格式。还记得上篇里的那个图吗?
DOS 头和 NT 头就是 PE 文件中两个重要的文件头。
一、DOS 头
DOS 头的作用是兼容 MS-DOS 操作系统中的可执行文件,对于 32 位 PE 文件来说,DOS
所起的作用就是显示一行文字,提示用户:我需要在 32 位 windows 上才可以运行。我
认为这是个善意的玩笑,因为他并不像显示的那样不能运行,其实已经运行了,只是在
DOS 上没有干用户希望看到的工作而已,好吧,我承认这不是重点。但是,至少我们看
一下这个头是如何定义的:
1. typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
2. WORD e_magic; // Magic number
3. WORD e_cblp; // Bytes on last page of file
4. WORD e_cp; // Pages in file
5. WORD e_crlc; // Relocations
6. WORD e_cparhdr; // Size of header in paragraphs
7. WORD e_minalloc; // Minimum extra paragraphs
needed
8. WORD e_maxalloc; // Maximum extra paragraphs
needed
9. WORD e_ss; // Initial (relative) SS value
10. WORD e_sp; // Initial SP value
11. WORD e_csum; // Checksum
12. WORD e_ip; // Initial IP value
13. WORD e_cs; // Initial (relative) CS value
14. WORD e_lfarlc; // File address of relocation
table
15. WORD e_ovno; // Overlay number
16. WORD e_res[4]; // Reserved words
17. WORD e_oemid; // OEM identifier (for
e_oeminfo)
剩余85页未读,继续阅读
geniemouse
- 粉丝: 2
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0