PE 文件
一、PE文件基本结构
上图便是PE文件的基本结构。(注意:DOS MZ Header和部分PE header的大小是不变的;DOS stub部分的大小是可变的。)
二、Section 详解
一个PE文件至少需要两个Section,一个是存放代码,一个存放数据。NT上的PE文件基本上有9个预定义的Section。分别 是:.text, .bss, .rdata, .data, .rsrc, .edata, .idata, .pdata, 和 .debug。一些PE文件中只需要其中的一部分Section.以下是通常的分类:
执行代码Section , 通常命名为: .text (MS) or CODE (Borland)
数据Section, 通常命名为:.data, .rdata, 或 .bss(MS) 或 DATA(Borland).
资源Section, 通常命名为:.edata
输入数据Section, 通常命名为:.idata
调试信息Section,通常命名为:.debug
这些只是命名方式,便于识别。通常与系统并无直接关系。通常,一个PE文件在磁盘上的映像跟内存中的基本一致。但并不是完全的拷贝。Windows 加载器会决定加载哪些部分,哪些部分不需要加载。而且由于磁盘对齐与内存对齐的不一致,加载到内存的PE文件与磁盘上的PE文件各个部分的分布都会有差异。
PS:PE 文件中的数据按照磁盘数据标准存放,以 0x200 字节为基本单位来进行组织的,因此大家学习久了会发现 PE 数据节的大小永远是 0x200 的整数倍。
同样的,当指令代码装入内存后,将按照内存数据标准存放,以 0x1000 字节来进行组织的,因此,内存中的节就总是 0x1000 的整数倍。
三、Address 详解
1.文件偏移地址(FO)
文件偏移地址也叫物理地址,用十六进制工具(如 WINHex,C32asm 等)打开文件所显示的地址就是文件偏移地址。文件偏移地址从 PE 文件的第一个字节开始计数,起始值为 0。这是文件在磁盘上存放时相对文件开头的偏移。
2.虚拟内存地址 (VA)
PE 文件中的指令被装入内存后的地址。
3.镜像基址(IB)
PE 文件装入内存时的基地址。默认情况下,EXE 文件在内存中的基地址是 0x00400000,而DLL文件是 0x10000000。不过,这个地址程序员们是可以通过修改编译选项更改的。我这样讲,大家把ImageBase 当作是一个坐标原点。有了这个原点,那虚拟内存地址(VA)都是从这个原点起步的。
4.相对虚拟地址 (RVA)
既然镜像基址(Image Base)是原点,而虚拟内存地址是从原点开始“跑”的。那么虚拟内存地址相对镜像基址跑了多远就是“相对虚拟地址”了。也就是说VA = ImageBase + RVA。
PE 文件的更多相关文章
- 获取pe文件的文件类型
工程文件petype.cpp通过调用pefile类中的函数获取文件类型. 文件类型的判断通过5个监测点完成. 监测点1:dos头的e_magic 监测点2:nt头的Signature 监测点3:文件头 ...
- 浅析MSIL中间语言——PE文件结构篇
一.开篇 开篇我想讲一下于本文无关的话题,其实我很想美化一下自己博客园一直没时间弄,无意间找了博客园李宝亨的博客园里面有一篇分享自己主题的文章,我就将这个模板暂时用作我的blog主题,我要讲述一个关于 ...
- PE文件学习系列笔记四-C++实现PE文件的分析
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 综述: 首 ...
- PE文件学习系列三-PE头详解
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 最近比较忙 ...
- PE文件学习系列二 DOS头分析
合肥程序员群:49313181. 合肥实名程序员群 :128131462 (不愿透露姓名和信息者勿加入)Q Q:408365330 E-Mail:egojit@qq.com PE文件结 ...
- C语言读取PE文件信息(一)
接下来的内容来源于对该博客文章http://www.pediy.com/kssd/pediy06/pediy7006.htm的解析. 一.打印Sections信息.下面的程序打印出Windows_Gr ...
- PE文件的执行顺序
当一个PE文件被执行时,PE装载器首先检查DOS MZ header里的PE header的偏移量.如果找到,则直接跳转到PE header的位置. 当PE装载器跳转到PE header后,第二步要做 ...
- PE文件学习系列一为什么是PE
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q Q:408365330 E-Mail:egojit@qq.com PE概述: ...
- 【C#进阶系列】02 PE文件,程序集,托管模块,元数据——还是那个Hello world
好了,还是这张图,还是一样的Hello world. 因为本章其实很多都是讲一些命令行编译啊什么鬼的配置类的东西,要用的时候直接百度或者回头查书就可以了, 所以了解一下也就行了,也没有记录下来,接下来 ...
- PE文件结构部分解析以及输入的定位
原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable" ...
随机推荐
- JAVA TCP网络编程学习笔记
一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...
- (转)使用CruiseControl+SVN+ANT实现持续集成之三
在上一节中我们介绍了环境搭建和配置介绍,并快速启动CC查看集成结果,在本节中我们将详细介绍CC构建操作及监视. 1. 启动CC服务器 通过执行其根目录下的cruisecontrol.bat文件来启动C ...
- 输入整数n(n<=10000),表示接下来将会输入n个实数,将这n个实数存入数组a中。请定义一个数组拷贝函数将数组a中的n个数拷贝到数组b中。
代码一大串! #include<stdio.h> ],y[]; void arraycopy (double c[],double d[],int m); { ;i<=m;i++) ...
- Access数据库一种树形结构的实现和子节点查询
BOOL CManageDataBase::GetDepTreeAllSons( int rootItem ) { CADORecordset Rst(&m_DataBase); BOOL b ...
- What is a First Chance Exception?
Refrences: http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx To be continued...
- Ubuntu 设定壁纸自动切换的shell脚本
升级到Ubuntu14.04后,感觉bug的确比12.04少多了.顶部任务栏支持半透明效果,所以整个桌面也看上去漂亮了很多.这样的桌面也是值得瞎捣鼓一下的,想到换壁纸,但是没找到设定动态更换壁纸的选项 ...
- htm5实现视差动画
requestAnimationFrame.js window.requestAnimFrame = (function() { return window.requestAnimationFrame ...
- Ubuntu、Sql Server卸载心得
这几天真是搞得亏大了! 首先是卸载Ubuntu,直接在Windows下格式化那个盘了,这就出岔子了……然后越来越糟糕,最后弄得一个系统都没有了……然后重装系统…… 然后装VS和Sql Server,因 ...
- Windows Phone 8.1 列表控件(2):分组数据
说到 List 控件,Windows Phone 8.1 上推荐使用的是 ListView 和 GridView. 而这两个控件实在太多东西可讲了,于是分成三篇来讲: (1)基本 (2)分组数据 (3 ...
- linux文件权限位SUID,SGID,sticky的设置理解
SUID含义:文件的该位被设置为1,在该文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来 执行这个文件,他都有文件所有者的特权,如果所有者是root的话,那么执行人就有超 ...