PE文件及虚拟内存间及映射.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PE文件及虚拟内存间及映射

PE文件与虚拟内存间的映射 2008-09-01 23:17 (1)静态反汇编工具看到的PE文件中某条指令的位置是相当于磁盘文件而言的,即所谓的文件偏移,我们可能还需要知道这条指令在内存中所处的位置,即虚拟内存地址(VA)。 (2)反之,在调试时看到的某条指令的地址是虚拟内存地址,我们也经常需要回到PE文件中找到这条指令对应的机器码。 为此,我们需要弄清楚PE文件地址和虚拟内存地址之间的映射关系。首先,我们先看几个重要的概念。 1文件偏移地址(File Offset Address) 数据在PE文件中的地址叫文件偏移地址。这是文件在磁盘上存放时相对于文件开头的偏移。 2装载基址(Image Base) ?? PE装入内存时的基地址。默认情况下,EXE文件在内存中的基地址0DLL文件是0这些位置可以通过修改编译选项来更改。 3虚拟内存地址(Virtual Address,VA) PE文件中的指令被装入内存后的地址。 4相对虚拟地址(Relative Virtual Address,RVA) 相对虚拟地址是内存地址相对于映射基址的偏移量。 虚拟内存地址、映射基址、相对虚拟内存地址三者之间有如下关系。 文件偏移是相对于文件开始处0字节的偏移,RVA(相对虚拟地址)则是相对于装载基址0的偏移。由于操作系统在进行装载时“基本”上保持PE中的各种数据结构,所以文件偏移地址和RVA有很大的一致性。 之所以说“基本”上一致是因为还有一些细微的差异。这些差异是由于文件数据的存放单位与内存数据存放单位不同而造成的。 (1)PE文件中的数据按照磁盘数据标准存放,以0x200字节为基本单位进行组织。当一个数据节(section)不足0x200字节时,不足的地方将被0x00填充;当一个数据节超过0x200字节时,下一个0x200块将分配给这个节使用。因此PE数据节的大小永远是0x200的整数倍。 (2)当代码装入内存后,将按照内存数据标准存放,并以0x1000字节位基本单位进行组织。类似的,不足将被补全,若超出将分配下一个0x1000为其所用。因此,内存中的节总是0x1000的整数倍。 (表一)中列出的文件偏移地址和RVA之间的对应关系可以让大家更直接地理解这种“细微的差异”。 由于内存中数据节相对于装载基址的偏移量和文件中数据节的偏移量有上述差异,所以进行文件偏移到虚拟内存地址之间的换算时,还要看所转换的地址位于第几个节内。 我们把这种由存储单位差异引起的节基址差称作节偏移,在上例中: .text节偏移=0x1000-0x400=0xc00 .rdata节偏移=0x7000-0x6200=0xE00 .data节偏移=0x9000-0x7400=0x1C00 .rsrc节偏移=0x2D000-0x7800=0x25800 文件偏移地址与虚拟内存地址之间的换算关系可以用下面的公式来计算。 文件偏移地址=虚拟内存地址(VA)-装载基址(Image Base)-节偏移=RVA-节偏移

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档