PE结构详解(加壳脱壳必备知识)第二篇·存储地址介绍

昨天分享了一篇PE结构详解(加壳脱壳必备知识),本篇是上一篇续篇,主要介绍关于PE结构的三种存储地址 VA、RVA、FILEOFFSET及转换方式,希望对你有所帮助。

一、关于VA、RVA、FILEOFFSET

  • VA:虚拟地址,PE文件映射到内存后的地址。
  • RVA:相对虚拟地址,内存地址相对于映射基地址的偏移地址。
  • FileOffset:文件偏移地址,相对PE文件在磁盘上的文件开头的偏移地址。

在磁盘上文件是按照IMAGE_OPTIONAL_HEADER的FileAligment值进行对其的。而内存中是按照IMAGE_OPTIONAL_HEADER的SectionAligment值进行对其的,关于该信息请参考PE结构详解(加壳脱壳必备知识)

FileAligment是以磁盘扇区为单位进行对齐,最小为512字节(十六进制:0x200),SectionAligment是以内存分页为单位进行对齐,一般win32位4K(十六进制:0x1000)。

通常情况FileAligment与SectionAligment值是相同的,这样磁盘文件与内存文件的结构完全一样。当不一样时,磁盘文件与内存映像的同一节表数据在磁盘和内存的偏移不同,则需要进行地址转换了,一般转换方式分为VA(虚拟地址)转RVA(相对虚拟地址),RVA(相对虚拟地址)转FileOffset(文件偏移地址)。下面我们还是通过“hello word”案例来举例。helloword代码请见上篇文章PE结构详解(加壳脱壳必备知识)​​​​​​​​​​​​​​

二、转换方式

1.1 VA转RVA

VA转RVA非常简单,VA值减去IMAGE_OPTIONAL_HEADER结构体中的ImageBase(映像文件装载虚拟地址)字段的值。即:RVA=VA-ImageBase;

1.2 RVA转FileOffset

文件偏移=该数据所在节的起始文件偏移(R.偏移)+(某数据的RVA-该数据所在节的起始RVA)。

在计算偏移时,word类型偏移为2;byte类型偏移为1;Dword类型为4,小伙伴记住后方便计算。

PE结构详解(加壳脱壳必备知识)第二篇·存储地址介绍

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

登峰造Geek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值