博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RVA和RAW(文件偏移)的转换
阅读量:2065 次
发布时间:2019-04-29

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

 

节表和节——RVA和文件偏移的转换 

RVA和文件偏移的转换的转换算法

 (1)循环扫描节表并得到每个节在内存中的起始RVA(根据VirtualAddress字段),并根据节的大小(SizeOfRawData字段)算出节的结束RVA,最后比较判断目标RVA是否落在某个节之内。

(2)如果目标RVA处于某个节之内,那么用目标RVA减去节的起始RVA,这样就得到了目标RVA相对于节起始地址的偏移量RVA'。

(3)在节表中获取节在文件中所处的偏移(PointerToRawData字段),将这个偏移值加上上一步得到的RVA'值,这才是数据在文件中的真正偏移位置。

 

RAW CInfector ::RVA2RAW( RVA rva){                 int i;                 for (i = 0; i < m_pPEHeader->FileHeader.NumberOfSections ; i++)                {                                 if (rva < m_pSectionStart[i].VirtualAddress + m_pSectionStart[i].Misc.VirtualSize &&                                                 rva >= m_pSectionStart[i].VirtualAddress)                                {                                                 break ;                                }                }                 return (m_pSectionStart[i].PointerToRawData + rva - m_pSectionStart[i].VirtualAddress);}

PointerToRawData(节在文件中所处的偏移)是节在文件中的起始位置

 

 rva - m_pSectionStart[i].VirtualAddress   总的地址---起始地址     是一段长度

 

 

 

 

转载地址:http://apumf.baihongyu.com/

你可能感兴趣的文章
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
Redis学习笔记(四)—— redis的常用命令和五大数据类型的简单使用
查看>>
Win10+VS2015编译libcurl
查看>>
Windows下使用jsoncpp
查看>>
Ubuntu下测试使用Nginx+uWsgi+Django
查看>>
Windows下编译x264
查看>>
visual studio调试内存泄漏工具
查看>>
开源Faac实现PCM编码AAC
查看>>
Windows下wave API 音频采集
查看>>
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>
AndroidStudio 导入三方库使用
查看>>
Ubuntu解决gcc编译报错/usr/bin/ld: cannot find -lstdc++
查看>>
解决Ubuntu14.04 - 16.10版本 cheese摄像头灯亮却黑屏问题
查看>>
解决Ubuntu 64bit下使用交叉编译链提示error while loading shared libraries: libz.so.1
查看>>
MFC程序添加console窗口+printf打印输出信息
查看>>
VS生成DLL文件供第三方调用
查看>>
Android Studio color和font设置
查看>>
Python 格式化打印json数据(展开状态)
查看>>
Centos7 安装curl(openssl)和libxml2
查看>>