博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[PE结构分析] 7.相对虚拟地址(RVA)和文件偏移间的转换
阅读量:7280 次
发布时间:2019-06-30

本文共 926 字,大约阅读时间需要 3 分钟。

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)。

转载于:https://www.cnblogs.com/night-ride-depart/p/5773451.html

你可能感兴趣的文章
CHIL-SQL-IN 操作符
查看>>
des 加密 iOS
查看>>
XML 对xml文件的crud的增加 create操作 增加元素 增加属性
查看>>
java TCP通信 socket 套接字 用图片上传轰炸服务器
查看>>
linux处理闰秒
查看>>
Python模块configparser(操作配置文件ini)
查看>>
平衡二叉树(笔记)
查看>>
分析Linux内核创建一个新进程的过程
查看>>
视图层 view
查看>>
免插件,简单实现上拉加载loading
查看>>
一个现象,
查看>>
传说中的 拉伸,
查看>>
python中取整的几种方法
查看>>
css中margin上下外边距重叠问题
查看>>
祝母亲大人福如东海长流水,寿比南山不老松
查看>>
基于SolidWorks 二次开发专用CAD系统
查看>>
【HDOJ】1069 Monkey and Banana
查看>>
Linux下安装opencv with-ffmpeg解决无法读取视频的问题
查看>>
python中的随机函数
查看>>
lockf
查看>>