VA&RVA 和 RVA to RAW
VA&RVA
VA指的是进程虚拟内存的绝对地址,RVA(Relative Virtual Address,相对虚拟地址)指从某个基准位置(ImageBase)开始的相对地址。VA与RVA满足下面的换算关系。
RVA + ImageBase = VA
PE(Portable Executable)头部信息大多以RVA形式存在。原因在于,PE文件(主要是DLL(DLL,Dynamic Linked Library))加载到进程虚拟内存的特定位置时,该位置可能已经加载了其它PE文件(DLL)。此时必须通过重定位(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
PE头中表示地址时不使用VA,而是RVA。
Q:节区头成员 VirtualAddress 是内存中节区头的起始地址(RVA),VirtualAddress 不就是 VA 吗?为什么要叫 RVA 呢?
A:“使用 RVA 值来表示节区头的成员 VirtualAddress”,这样理解就可以。节区头结构体(IMAGE_SECTION_HEADER)的 VirtualAddress 成员与虚拟内存地址(VA,VirtualAddress)用的术语相同才引起这一混乱。“节区头成员 VirtualAddress 指的是虚拟内存中相应节区的起始地址,它以 RVA 的形式保存在结构体中”,如此理解即可。
Preference
逆向工程核心原理 \(P_{92}\) \(P_{104}\)
就着这个帖子理解 RVA、VA、RAW、偏移量
RVA可以理解为内存偏移;RAW可以理解为文件偏移(硬盘偏移)。
VA&RVA 和 RVA to RAW的更多相关文章
- 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)
0 前言 此篇文章想写如何通过工具手查导出表.PE文件代码编程过程中的原理.文笔不是很好,内容也是查阅了很多的资料后整合出来的.希望借此加深对PE文件格式的理解,也希望可以对看雪论坛有所贡献.因为了解 ...
- C/C++ 实现VA与FOA之间的转换
PE结构中的地址互转,这次再来系统的复习一下关于PE结构中各种地址的转换方式,最终通过编程来实现自动解析计算,最后将这个功能集成到我的迷你解析器中,本章中使用的工具是上次讲解PE结构文章中制作的CMD ...
- PE格式第三讲扩展,VA,RVA,FA(RAW),模块地址的概念
PE格式第三讲扩展,VA,RVA,FA的概念 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (vi ...
- 第三讲扩展,VA,RVA,FA(RAW),模块地址的概念
一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边都是. 二丶模块地址(image Base) 模块地址,就是exe加载到内存的时候 ...
- PE格式的理解(待补充)
PE文件格式 一.基本结构 1.DOS头一般到节区头成为PE头部分,其下称为PE体.文件的内容一般可分为代码(.text).数据(.data).资源(.rsrc),分别保存. 2.PE头与各节区的尾部 ...
- 深入学习PE文件(转)
PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. 基本结构. 上图便是PE文件的基本结构.(注意:DO ...
- 解析PE文件
最近在自学解析PE文件,根据小辣椒(CFF Explorer)以及各论坛上大佬的帖子,做了个黑屏打印PE文件的,历时7天完成,在此想跟有相关需要的同学们分享下思路,有不足之处也希望大家不吝赐教,指点出 ...
- Dotnet文件格式解析
0x0.序 解析过程并没有介绍对pe结构的相关解析过程,网上此类相关资料很多可自行查阅,本文只介绍了网上资料较少的从pe结构的可选头中的数据目录表中获取dotnet目录的rva和size,到完全解析d ...
- PeCheck
早上起来看到这个代码 整理一下 // PETableDlg.cpp : 实现文件 // #include "stdafx.h" #include "PECheck.h& ...
随机推荐
- oracle 之 包,包体创建和使用案例
先创建包,再创建包体---------------创建包体--------------------- create or replace package body pkg_yygl_service I ...
- 【Mybatis】--配置SqlMapConfig文件中的几个注意事项
一.别名 如果设置别名后,就可以在Mapper.xml 文件中使用设置的别名 <typeAliases> <!-- 单个别名定义 --> <typeAlias alias ...
- 在Mac OSX下安装Microsoft Calibri字体
参考: Where can I find default Microsoft fonts Calibri, Cambria? 在Mac OSX下安装Microsoft Calibri字体 1.下载: ...
- C#接口的作用详解
.C#接口的作用 : C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认 ...
- 最简单的服务器和客户机(python3的编码与解码问题)
在学习python的过程中,我越来越感觉到python2和python3之间有很多不同点,最近发现的一点就是编码问题. 在代码清单14-1和14-2中,因为作者是用python2来写得,然后我是用py ...
- Ajax - 发送请求原理
1,什么是ajax? Asynchronous JavaScript and XML(当然现在xml已经由json代替): 主要是用于前后台的交互(表单提交已经被废弃): 使用场景:前台获取数据.表单 ...
- vue运行报错--preventDefault
[Intervention] Unable to preventDefault inside passive event listener due to target being treated as ...
- 转youhu科技的文章 勿怪 感激 感激
资源加载 资源加载是加载模块中最为耗时的部分,其CPU开销在Unity引擎中主要体现在Loading.UpdatePreloading和Loading.ReadObject两项中,相信经常查看Prof ...
- ajax 怎么重新加载页面
$.ajax({ type:"post", url:url, data:{xxx:xx}, dataType: "json", success : functi ...
- python中那些双下划线开头得函数和变量
Python中下划线---完全解读 Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __x ...


