pe文件格式
pe(portable executable)是win32平台课执行文件遵守的数据格式,常见的可执行文件都是典型的pe文件
一个可执行文件不光包含了二进制的机器代码,还会自带许多其他信息,如字符串,菜单,图标,位图,字体等,pe文件格式规定了所有的这些信息在可执行文件中如何组织,在程序被执行时,操作系统会按照pe文件格式的约定去对应的地方准确的定位各种类型的资源,并分别装入内存的不同区域
pe文件格式把可执行文件分成若干的数据节(section)不同的资源被存放在不同的节中
.text 由编译器产生,存放着二进制的机器代码,也是我们反汇和调试的对象。
.data 初始化的数据块,如宏定义,全局变量,静态变量等
.idata 可执行文件所使用的动态链接库等外来函数与文件的信息
.rsc 存放程序的资源如图标菜单等
.reloc
.edata
.tls
.rdata
虚拟内存
Windows的内存可以分为两个层面
物理内存
虚拟内存
物理内存非常复杂需要进入Windows内核级别ring0才能看到
用户模式下我们用调试器看到的内存地址都是虚拟内存
Windows让所有的进程都相信自己拥有独立的4gb内存空间,但是我们计算机那根实际的内存条可能只有512Mb,怎么可能为所有进程都分配4gb的内存呢?这一切都是通过虚拟内存管理器的映射做到的;
虽然每个进程都相信自己拥有4gb的空间,但实际上他们运行时真正能用到的空间根本没有那么多,内存管理器只是分给进程一片假地址,或者说是虚拟地址,让进程们认为这些虚拟地址都是可以访问的,如果进程不使用这些虚拟地址,他们对进程来说就只是一笔五行的数字财富,当需要进行实际的内存操作时,内存管理器才会把虚拟地址和物理地址联系起来
进程所拥有的4gb虚拟内存中包含了程序运行时所必需的资源,比如代码,栈空间,堆空间,资源区,动态连接库等
pe文件与虚拟内存之间的映射
在调试漏洞时,可能经常需要做这样两种操作。
1.静态反汇编工具看到的pe文件中某条指令的位置是相对于磁盘文件而言的,即所谓的文件的偏移,我们可能还需要知道这条指令在内存中所处的位置,即虚拟内存地址(VA)
2.在调试时看到的某条指令的地址是虚拟内存地址,我们也经常回到pe文件中找到这条指令对应的机器码。
我们需要弄清楚pe文件地址和虚拟内存地址之间的映射关系
1.文件偏移地址(file offset)
数据在pe文件中的地址叫文件偏移地址,文件在磁盘上存放时相对于文件开头的偏移
2.装载基址(image base)
pe装入内存的基地址,默认情况下,exe文件在内存中的基地址是0x00400000,dll文件是0x10000000.这些位置可以通过修改编译选项更改。
3.虚拟内存地址(virtual address,VA)
pe文件中的指令被装入内存后的地址。
4.相对虚拟地址(relative virtual address,rva)
相对虚拟地址是内存地址相对于映射基址的偏移量
VA=IMAGE BASE+RVA
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"dtmb.taobao.com",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
资源网 » 二进制文件概述
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 你们有qq群吗怎么加入?