PE文件的内存映射

如果想要理解PE文件与虚拟内存之间的映射关系,首先要理解一些概念:

1.文件偏移地址(file offset) PE文件数据在硬盘中存放的地址就叫做文件偏移地址。用winhex程序查看文件时的offset就是文件偏移地址了。文件偏移地址就是指文件在磁盘上存放时相对于文件开头的偏移。

2.装载基址(image base) 装载基址就是指pe文件装入内存时的基地址,一般情况下,EXE文件的装载基址都是0x00400000,但是也可以更改的,尤其是dll文件。

3.虚拟内存地址(virtual address,VA) 虚拟内存地址就是指pe文件被装入内存之后的地址。

4.相对虚拟地址(relative virtual address ,RVA) 相对虚拟地址指的是没有加算装载基址情况下的内存地址。

然而虚拟内存地址和装载基址和相对虚拟地址之间的关系如下

虚拟内存地址(VA)=装载基址(image base)+相对虚拟地址(RVA)

下面是我偷来的一张图片

不难看出,PE文件映射到虚拟内存变化很大很大。

在这里还有说明一下文件偏移的第一个字节是从0x00000000处开始的,而虚拟内存地址是从装载基址处开始的,也是就是从0x00400000处开始。

由于操作系统在装载pe文件的时候还是按照pe文件中的各种数据结构来映射的,所以文件偏移地址与相对虚拟地址还是有一定的相似之处的,他们之间的差异是由于数据单位存放位置不同而造成的。

pe文件的数据一般都是按照0x200字节为基本单位进行组织存放的,当一个数据区段不够0x200的时候,没有用到的空间用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值