RVA to RAW

相对虚拟地址和文件偏移间的转换

RVA是相对虚拟地址(Relative Virtual Address)的缩写。RVA是当PE 文件被装载到内存中后,某个数据位置相对于文件头的偏移量。

例如:导入表的位置和大小可以从PE文件头中IMAGE_OPTIONAL_HEADER32结构的数据目录字段中获取,对应的项目是DataDirectory字段的第2个IMAGE_DATA_DIRECTORY结构。从IMAGE_DATA_DIRECTORY结构的VirtualAddress字段得到的是导入表的RVA值,如果在内存中查找导入表,那么将RVA值加上PE文件装入的基址就是实际的地址;如果在PE文件中查找导入表,需要将RVA转换成File Offset(也就是数据在文件中的位置)。

RVA转换到文件偏移地址的方法如下:

步骤一:循环扫描区块表得出每个区块在内存中的起始 RVA(根据IMAGE_SECTION_HEADER 中的VirtualAddress 字段),并根据区块的大小(根据IMAGE_SECTION_HEADER 中的SizeOfRawData 字段)算出区块的结束 RVA(两者相加即可),最后判断目标 RVA 是否落在该区块内。
步骤二:通过步骤一定位了目标 RVA 处于具体的某个区块中后,那么用目标 RVA 减去该区块的起始 RVA ,这样就能得到目标 RVA 相对于起始地址的偏移量 RVA2.
步骤三:在区块表中获取该区块在文件中所处的偏移地址(根据IMAGE_SECTION_HEADER 中的PointerToRawData 字段), 将这个偏移值加上步骤二得到的 RVA2 值,就得到了真正的文件偏移地址。

既,已知某虚拟地址(如va)和某区块的虚拟地址(text_va),虚拟地址在区块中,同时还知道此区块在文件中的位置(text_file_offset),解出此虚拟地址在文件中的具体位置。解:根据他们的偏移量相同(都是text_va - va)可知,答案为 text_file_offset + (text_va - va)。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

来自为知笔记(Wiz)

时间: 2024-08-04 19:21:47

RVA to RAW的相关文章

VA&amp;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).此时必须通过重定位

第三讲扩展,VA,RVA,FA(RAW),模块地址的概念

一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边都是. 二丶模块地址(image Base) 模块地址,就是exe加载到内存的时候,所在的地址, 比如MZ位置,在那个位置,那么对应模块地址就是这个位置 在OD中的内存中查看就是PE头 三丶RVA(relative Virtual Address) 相对虚拟地址偏移 假设我们找一个虚拟地址 VA = 0X4001200   (虚拟地址) 那么算出他的相对偏移 那么我们就要看他属于

转: PE rva to raw 虚拟偏移地址和文件物理偏移地址

+---------+---------+---------+---------+---------+---------+| 段名称 虚拟地址 虚拟大小 物理地址 物理大小 标志 |+---------+---------+---------+---------+---------+---------+| Name VOffset VSize ROffset RSize Flags |+---------+---------+---------+---------+---------+-----

32位PE文件信息查看器(WIN32控制台)

最近重新撸了一遍PE文件的文件格式,这个程序算是复习的产物吧. 说明与警告: 1.只适用于32位PE文件,可以读取符合标准的32位PE文件的DOS头.NT头.节区头.导入表.导出表信息,想要其他功能请在PEFile类中找,没有请留言 2.因为是边复习功能边写的,所以不要纠结程序架构.编码风格.鲁棒性等各种问题,我会再改的 3.翻译可能是不准的,仅供参考 4.所有计数从0开始,程序不对是否越界进行检查 5.转载请注明出处,本人不对引用此源码后程序产生的任何问题负责 单独的PEFile类 class

《逆向工程核心原理》

<逆向工程核心原理> 基本信息 作者: (韩)李承远    译者: 武传海 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115350183 上架时间:2014-4-15 出版日期:2014 年5月 开本:16开 页码:679 版次:1-1 所属分类:计算机 > 软件工程及软件方法学 > 综合 更多关于>>><逆向工程核心原理>   编辑推荐     韩国逆向分析领域龙头之作!逆向分析师必知核心原理大全!本书集中讲解逆向分析技术

PE 文件格式 详解 二

内容引用自:看雪<逆向工程原理>,http://www.blogfshare.com/pe-header-one.html .如有错误,欢迎留言. 1. 区块表(节表) 区块表紧跟在PE头后面,所有区块的属性都被定义在区块表中.区块表中的数据仅仅是因为属性相同被放到一起,对程序的各种方法.数据的追溯还是要用到DataDirectory. 区块表是由一组IMAGE_SETION_HEADER结构组成,每个结构描述一个区块,各结构的排列顺序与其所描述的区块在文件中的排列顺序是一致的. 区块表最后以

逆向学习-Upack的PE文见头分析

重叠文件头 MZ文件头与PE文件头重叠. offest 0 e_magic:magic number = 4D5A('MZ') offest 3C  e_lfanew:File address of new exe header IMAGE_FILE_HEADER.SizeOfOptionalHeader 修改此值,可以向文件头插入解码代码. 增大此值,就在IMAGE_OPTIONAL_HEADER与IMAGE_SECTION_HEADER之间添加了额外空间.这个区域就被添加了解码代码. IMA

android开发步步为营之54:读取assets,raw文件夹下文件

一.读取assets文件下文件products.json public String readAssetFile(Context c, String file) { Elapsed profiler = new Elapsed(); BufferedReader bufReader = null; try { InputStreamReader inputReader = new InputStreamReader(c.getResources().getAssets().open(file))

LwIP - raw/callback API、协议栈API(sequential API)、BSD API(或者说 SOCKET API)

1.使用raw/callback API编程,用户编程的方法是向内核注册各种自定义的回调函数,回调函数是与内核实现交换的唯一方式. recv_udp, accept_function, sent_tcp, recv_tcp, do_connected, poll_tcp, err_tcp! 2.协议栈API(sequential API)是基于raw/callback API实现的,它与内核交换的方式也只能通过回调. netconn_new, netconn_delete, netconn_ge