VA&RVA 和 RVA to RAW
Posted doctorx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VA&RVA 和 RVA to RAW相关的知识,希望对你有一定的参考价值。
VA&RVA
VA指的是进程虚拟内存的绝对地址,RVA(Relative Virtual Address,相对虚拟地址)指从某个基准位置(ImageBase)开始的相对地址。VA与RVA满足下面的换算关系。
RVA + ImageBase = VA
PE(Portable Executable)头部信息大多以RVA形式存在。原因在于,PE文件(主要是DLL)加载到进程虚拟内存的特定位置时,该位置可能已经加载了其它PE文件(DLL,Dynamic Linked Library)。此时必须通过重定位(Relocation)将其加载到其它空白的位置,若PE头信息使用的是VA,则无法正常访问。因此,使用RVA来定位信息,即使发生了重定位,只要相对于基准位置的相对地址没有变化,就能正常访问到指定信息,不会出现任何问题。
提示:
32 位 Widows OS 中,各进程分配有 4GB 的虚拟内存,因此,进程中 VA 值的范围是 0000 0000 ~ FFFF FFFF。
RVA to RAW
PE文件加载到内存时,每个节区都要能准确完成内存地址与文件偏移间的映射。这种映射一般称为 RVA to RAW,方法如下:
- 查找RVA所在节区。
- 使用简单的公式计算文件偏移(RVA)。
根据IMAGE_SECTION_HEADER结构体,换算公式如下:
RAW - PointerToRawData = RVA - VirtualAddress
进而得:
RAW = RVA - VirtualAddress + PointerToRawData
Preference
逆向工程核心原理 (P_{92}) (P_{104})
就这这个帖子理解 RVA、VA、RAW、偏移量
以上是关于VA&RVA 和 RVA to RAW的主要内容,如果未能解决你的问题,请参考以下文章
PE格式第三讲扩展,VA,RVA,FA(RAW),模块地址的概念