Windows PE 结构 之 RVA&FOA地址转换与对齐

Windows PE 结构 之 RVA&FOA地址转换与对齐 - 侠者安全社区
Windows PE 结构 之 RVA&FOA地址转换与对齐
此内容为付费阅读,请付费后查看
会员专属资源
您暂无购买权限,请先开通会员
开通会员
付费阅读

0x0 基础知识

00 RVA & FOA 转换;

  • 当一个 PE 文件被加载到内存中以后,我们称之为 ” 映象 “(image)。一般来说,PE文件在硬盘上和在内存里是不完全一样的,被加载到内存以后其占用的虚拟地址空间要比在硬盘上占用的空间大一些,这是因为各个节在硬盘上是连续的,而在内存中是按页对齐的,所以加载到内存以后节之间会出现一些“空洞” 。
  • 因为存在这种对齐,所以在 PE 结构内部,表示某个位置的地址采用了两种方式,即RVA和FOA
  • RVA:英文全称 Relatively Virtual Address 。相对虚拟地址,内存地址相对于映射基地址的偏移地址。
  • FOA:英文全称 FileOffset 。 文件偏移地址,和内存无关,它是指磁盘某个位置距离文件头的偏移。
Windows PE 结构 之 RVA&FOA地址转换与对齐-侠者安全社区

01 文件对齐与内存对齐

  • 区块的大小是要对齐的,有两种对齐值,一种用于磁盘文件内,另一种用于内存中。PE文件头中指出了这两个个值,他们可以不同。
  • 在PE文件头中,FileAignment 定义了磁盘区块的对齐值,每一个区块从对齐值的倍数的偏移位置开始。
    • 一个典型对齐值是200H,每一个区块从200H的倍数的文件偏移位置开始。
    • 假设区块的第1个节在400H处,长度为90H,那么400H~490H为这个区块的数据,而文件对齐值为200H,为了使这一节的长度为FileAignment 的整数倍,490H~600H会被0填充,这段空间称为区块间隙,下一个区块的开始位置为600H。
  • 在PE文件头中,SectionAignment 定义了内存区块的对齐值,每一个区块从对齐值的倍数的偏移位置开始。
    • 在x86系统中,PE文件区块的内存对齐值一般为1000H(4KB),每个区块从1000H的倍数的内存偏移开始;
    • 在x64系统中,PE文件区块的内存对齐值一般为2000H(8KB),每个区块从2000H的倍数的内存偏移开始;

0x1 实现代码

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情

    暂无评论内容