VARVA VA指的是进程的虚拟存储器的绝对地址,而RVA(relativevirtualaddress )指的是来自某个基准位置(图像基础)的相对地址。 VA和RVA满足以下换算关系。
RVA ImageBase=VA
许多可移植可执行(PE )报头信息作为RVA存在。 这是因为,当将PE文件(主要是动态链接库(dll ) )加载到进程虚拟内存的特定位置时,该位置可能已经加载了另一个PE文件(dll )。 在这种情况下,必须在“重定位”(Relocation )中加载到其他空白位置,如果使用VA,则无法正常访问PE报头信息。 因此,即使使用RVA定位信息,发生再定位,只要相对于基准位置的相对地址不变,就能够正常访问指定的信息,没有任何问题。
提示:
在32位Widows OS操作系统中,每个进程都分配4GB的虚拟内存,因此进程中的VA值范围为0000 0000到ffff fff。
将RVA to RAW PE文件加载到内存中时,每个部分都必须准确地映射内存地址和文件偏移。 这样的映射一般称为RVA to RAW,方法如下。
查找包含RVA的节。 使用简单的表达式计算文件偏移(RVA )。 根据IMAGE_SECTION_HEADER结构,换算公式如下:
原始端口地址=RVA-virtual address
此外:
raw=RVA-virtualaddresspointertorawdata
PE头中表示地址时不使用VA,而是RVA。
问:节标题成员的VirtualAddress不是内存中节标题的起始地址(RVA ),VirtualAddress不是VA吗? 为什么叫RVA?
答:可以理解为“使用RVA值表示作为节头部成员的虚拟地址”。 此混淆是因为节标头结构(IMAGE_SECTION_HEADER )的VirtualAddress成员和虚拟内存地址(VA,VirtualAddress )中使用的术语相同。 理解为“作为节标题的成员的VirtualAddress是虚拟存储器内的对应的节的起始地址,以RVA的形式保存在结构中”。
Preference逆向工程的核心原理(p_{92} ) ) ) ) p_{104} ) ) ) )。
了解此帖子的RVA、VA、RAW和偏移量
RVA可以理解为存储器偏移; 原始可以理解为文件偏移(硬盘偏移)。
转载于:https://www.cn blogs.com/houhaibushihai/p/9834702.html