PE文件关于虚拟相对地址RVA与基于文件的偏移地址关系

编写PE文件解析器(三) 下面有几个表网上资料比较少,因为几乎用不到,我查文档写写吧,这篇写得比较久很抱歉。 7、IMAGE_DIRECTORY_ENTRY_EXCEPTION【异常处理表】 CPU特定的并且基于表的异常处理。用于除x86之外的其它CPU上。偏移到一个IMAGE_XXX_RUNTIME_FUNCTION_ENTRY数组,根据文件头的Machine来确定结构,64位用IMAGE_IA64_RUNT 阅读详情

 由PE装载器将PE文件加到虚拟内存时使用的地址均是RVA地址, 而在文件中存放的数据的地址是基于文件的偏移地址, 因此存在一个从RVA到偏移地址的转换过程。当我们通过内存映射文件的方式获取文件数据内容时使用的是基于文件的偏移地址,这样才能正确获取我们所要获取的数据。

template <class T> void DumpImportsSection(PBYTE pImageBase, T * pNTHeader) // 'T' = PIMAGE_NT_HEADERS
{
    PIMAGE_IMPORT_DESCRIPTOR pImportDesc;
    DWORD importsStartRVA;

    // Look up where the imports section is (normally in the .idata section)
    // but not necessarily so.  Therefore, grab the RVA from the data dir.
    importsStartRVA = GetImgDirEntryRVA(pNTHeader,IMAGE_DIRECTORY_ENTRY_IMPORT);
    if ( !importsStartRVA )
        return;

    pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)GetPtrFromRVA(importsStartRVA,pNTHeader,pImageBase);
 for (;pImportDesc->Name;pImportDesc++)
 {
  if (pImportDesc->Name ==NULL)
   return;

  LPSTR pszDllName = (LPSTR)GetPtrFromRVA(pImportDesc->Name,pNTHeader,pImageBase);

  //寻找我们想要的函数
  DWORD dwThunkRVA = pImportDesc->OriginalFirstThunk;
  if (dwThunkRVA == 0)
  {
   dwThunkRVA = pImportDesc->FirstThunk;
  }
  PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) GetPtrFromRVA(dwThunkRVA,pNTHeader,pImageBase);//IAT
  for (;pThunk->u1.Function;pThunk++)
  {
   DWORD dwImportNameRVA = pThunk->u1.AddressOfData;
   PIMAGE_IMPORT_BY_NAME pImportName = (PIMAGE_IMPORT_BY_NAME) GetPtrFromRVA(dwImportNameRVA,pNTHeader,pImageBase);//IAT

   int i = 0;
  }
  if ( !pImportDesc )
   return;
 }
    

}

 

template <class T> LPVOID GetPtrFromRVA( DWORD rva, T* pNTHeader, PBYTE imageBase ) // 'T' = PIMAGE_NT_HEADERS
{
 PIMAGE_SECTION_HEADER pSectionHdr;
 INT delta;
  
 pSectionHdr = GetEnclosingSectionHeader( rva, pNTHeader );
 if ( !pSectionHdr )
  return 0;

 delta = (INT)(pSectionHdr->VirtualAddress-pSectionHdr->PointerToRawData);
 return (PVOID) ( imageBase + rva - delta );
}

PE文件的相对虚拟地址(RVA)和文件偏移地址(FOA)的转换 RVA(相对虚拟地址)和FOA(文件偏移)的具体含义大家可以看看《Windows PE 权威指南》或者是小甲鱼的PE结构详解视频,我相信大家看完之后一定会理解的,我这里就不写这些概念了。之所以会产生两者的转换,是因为同一个文件在硬盘和内存中的对齐方式不一样,我们可以通过IMAGE_OPTIONAL_HEADER结构体的SectionAlignment(内存对齐方式)和FileAlignment(文 阅读详情

相关推荐

Windows Pe 第三章 PE头文件-EX-相关编程-2(RVA_FOA转换)

Windows Pe 第三章 PE头文件-EX-相关编程-2(RVA_FOA转换)

天使也掉毛 2883

OllyDBG 入门系列(七)-汇编功能

今天我们的目标程序是 MyUninstaller 1.34 版。这是一个非常小的程序卸载工具,VC6编写,大小只有61K。我拿到的这个是上次闪电狼兄弟给我的,附带在里面的简体中文语言文件是由六芒星制作的。这个程序有个毛病:就是在列出的可卸载程序上双击查看属性时,弹出的属性窗口的字体非常难看,应该就是系统字体(SYSTEM_FONT): 我们今天的目标就是利用 OllyDBG 的汇编功能把上面显示的字体改成我们常见的9号(小五)宋体。首先我们用 OllyDBG 载入程序,按 CTR+N 组合键查找一下有哪些

子曰小玖的博客 773

相对虚拟地址,虚拟地址,文件偏移地址

相对虚拟地址(RVA,Relative Virtual Address),RVA只是内存中的一个简单相对于PE文件装入地址的偏移位置,它是一个“相对地址”,或称“偏移量”。例如,假设一个PE文件从地址400000h处装入,并且它的代码节开始于401000h,代码节的RVA将是:目标地址401000h - 装入地址400000h = RVA 1000h。 PE文件中出现RVA的概念是因为PE的

shitdbg的博客 4863

Thunk,thunk,thunk

    Thunk是一种技术,你觉得它是不是Knuth(Donald.E.Knuth 爷爷的名字)反过来而得的呢?它做了运行时函数行为的更改,即当执行了Thunk代码,Thunk代码会转而执行类成员函数代码,而这段Thunk代码是精心构造的,包括参数入栈和堆栈平衡工作,当然ATL有ATL的Thunk,我也写了一段。

_1943 的专栏 752

编写PE文件解析器(一)

第一篇先写一个PE格式解析器,学了那么久了写出来防止自己忘记,顺便练练手。PE格式解析是比较基础的内容,后面再越写越深。我写这个不是介绍pe格式,而是说编写解析代码,解释定义什么的网上一堆就不粘了,重要的定义我尽量简洁的描述清楚就行,如果想知道每一个定义或者字段是用来干嘛的,在pecoff文档里写的很清楚。业余时间写的,时间不充裕写得很慢,写错请斧正,转载请注明,高手轻批。 解析前需要弄

当我在写代码的时候我在写什么 2057

IPMI的SOL (Serial Over LAN) 和 UART

UART全名是Universal Asynchronous Receiver/Transmitter(通用異步接收/发送器),它是一个常用的異步串行传输协议。透过UART传输前,接收方须要先知道传输方的鲍率(Baud rate):单位时间内,讯号状态变化的次数。例如 115200 bps,表示每秒会传送115200个bits--> 因此读取率就是 1/115200=8.6微秒读取一次讯号。封包内的资料长度:通常是 8bits。

yeiris的博客 1万+

PE文件分析-资源表

时间:202106 资源表 DESC: 记录PE文件中的资源信息。 RVA: IMAGE_DATA_DIRECTORY[2].VirtualAddress。 资源包括 Cursor, Bitmap, Icon, Menu, Dialog, String, Accelerator 等预定义的资源类型和自定义的资源类型, 不同资源类型用 ID 区分。 预定义资源类型ID 描述 1 Cursor 2 Bitmap Resource 3 Icon 4 Menu Resource

m0_48995611的博客 546

强化学习:Distributed PPO (DPPO) 学习笔记

DPPO = Distributed + Proximal Policy Optimization Distributed:多个智能体并行训练 Proximal:限制策略更新幅度,确保稳定性 Policy Optimization:基于策略梯度的优化方法 核心思想:多个智能体并行探索环境,共享经验,通过裁剪策略更新确保训练稳定

只是个人学习笔记 1330

PE相关知识点

PE

qq_41672971的博客 212

Cadence17.4 Allegro PCB制板(gerber / 光绘)文件输出的顺序及注意点

Cadence Allegro PCB制板文件输出 (gerber 光绘文件输出)

weixin_45331044的博客 1万+

手把手教你用STM32单片机控制双向可控硅调光(附完整代码+电路图)

本文提供了一套完整的STM32单片机控制双向可控硅实现灯光无级调光的实战方案。详细讲解了硬件电路设计,包括过零检测与隔离驱动,并剖析了基于定时器中断的软件核心逻辑,通过精准的相位角计算实现平滑的灯光强度控制。附有完整代码与电路图,适合嵌入式开发者实践。

weixin_29194255的博客 952

[PE文件结构学习]1.相对虚拟地址(RVA)与物理地址的转换

正在学习PE文件结构,本人小菜鸟一个,如有不正确,欢迎指正。   PE结构即可执行文件的硬盘存储结构,Windows系统下面有exe dll等格式,PE结构先不介绍了,网上资料很多,看雪的文库里面的资料很好。   首先以我个人的理解来解释一下各种概念。   1.VA VA即virtual address。解释为虚拟地址,它是经过PE载入器重定位后的在该进程地址空间中能访问到的地址,在调

sryan的专栏 7458

PyTorch模型生产部署:ONNX/Triton导出与高可用架构实战

机器学习模型部署本质是训练环境与生产环境之间的运行时契约建立过程,涉及序列化协议、推理引擎兼容性、动态批处理及资源隔离等核心问题。ONNX凭借标准化算子集和跨框架支持,成为平衡兼容性、性能与可维护性的首选导出格式;Triton Inference Server则通过原生多框架支持、动态batching和热加载能力,显著提升GPU利用率与服务SLA保障水平。在金融风控、电商推荐等高要求场景中,基于ONNX+Triton+K8s的分层架构可稳定支撑千级QPS与毫秒级P95延迟,同时满足模型热更新、可观测性与版本

weixin_33857679的博客 448

RVA与RWA的关系

RVA与RWA的关系 原理比较简单:首先判断这个地址是否在PE头中,如果在,文件偏移和内存偏移相等,如果存在于文件的区段中,则利用以下公式: 内存偏移-该段起始的RVA(VirtualAddress)=文件偏移-该段的PointerToRawData 内存偏移=该段起始的RVA(VirtualAddress)+(文件偏移-该段的Point...

weixin_30480583的博客 499

华为OD机试真题 新系统【小花获胜的奶茶】

华为OD机试真题 新系统【小花获胜的奶茶】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小花获胜的奶茶】多语言题解。

qq_45776114的博客 382

configure: error: no acceptable C compiler found in $PATH解决方案

本文主要介绍了configure: error: no acceptable C compiler found in $PATH解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 4万+

PE文件格式(一)

简介 PE文件是Windows操作系统下使用的可执行文件格式 PE文件指的是32位的可执行文件,也称作PE32;64位的可执行文件称作PE+或PE32+(注意不是PE64),这是PE文件的一种扩展形式。 PE文件种类 可执行系列:EXE、SCR 驱动程序系列:SYS、VXD 库系列:DLL、OCX、CPL、DRV 对象文件系列:OBJ 除了OBJ之外的文件都是可执行的,有些虽然不能直接在Shell(Explorer.exe)中运行,但是可以使用调试器等来运行。不过,根据PE文件规范,OBJ也是做是PE文件

AlienEowynWan的博客 4019

基于STM32、HAL库的RN8209D电能计量芯片驱动程序设计

/ 假设电压互感器变比为220V:0.5V,电流互感器变比为20A:5mA。// 电压ADC原始值。// 电流ADC原始值。// 有功功率(W)// 电能(kWh)

corlin6688的博客 470

虚拟内存及PE文件与虚拟内存之间的映射

虚拟内存及PE文件与虚拟内存之间的映射

dyuanXu的博客 1244

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RVA 和文件偏移的转换

在前边我们探讨过RVA 这个词,但对于初次接触PE 文件的朋友来说,显得尤其陌生和无奈。中国人不喜欢老外的缩写,但总要**着接受……不过,在有了前边知识的铺垫之后,现在来谈这个概念大家伙应该能够得心应手了。起码不用显得那么的费解和无奈~ RVA 是相对虚拟地址(Relative Virtual Address)的缩写,顾名思义,它是一个“相对地址”。PE 文件中的各种数据结构中涉及地址的字段

求索 1601

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PE文件结构学习

1.介绍   PE(Portable Executable),既可移植的执行体。PE文件是Windows下使用的可执行文件格式。PE文件是指32位的可执行文件,也称PE32,64位称PE+或PE32+,是PE32的一种扩展形式(不是PE64) 2.PE文件格式 种类 主扩展名 可执行系列 EXE、SCR 库系列 DLL、OCX、CPL、DRV 驱动程序系列 ...

xlsj雪松的博客 604

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

PE文件基础

PE文件结构 文章目录PE文件结构前置知识整体结构DOS头DOS头的定义(C语言):DOS程序NT头NT头的定义(C语言):PE签名(Signature)PE文件头(IMAGE_FILE_HEADER)PE文件头的定义(C语言):结构解释:PE可选头(IMAGE_OPTIONAL_HEADER)PE可选头的定义(C语言):结构解释:节表(IMAGE_SECTION_HEADER)节表的定义(C语言):结构解释:节(块)导入表和导出表导入表和导出表统一使用一下结构:导入表的定义(C语言):结构解释:结构解释:

qq_45835867的博客 936

PE文件结构

如果想在我的平台上运行程序,你的文件就必须按照我所规定的格式组织

re1wn 1022

相对地址转决定地址_PE结构详解(加壳脱壳必备知识)第二篇·存储地址介绍...

昨天分享了一篇PE结构详解(加壳脱壳必备知识),本篇是上一篇续篇,主要介绍关于PE结构的三种存储地址 VA、RVA、FILEOFFSET及转换方式,希望对你有所帮助。一、关于VA、RVA、FILEOFFSETVA:虚拟地址,PE文件映射到内存后的地址。RVA:相对虚拟地址,内存地址相对于映射基地址的偏移地址。FileOffset:文件偏移地址,相对PE文件在磁盘上的文件开头的偏移地址。在磁盘上文...

weixin_42510841的博客 184

PE文件格式(用于代码逆向分析)

PE文件格式PE文件基本结构VA & RVARVA to RAW(内存地址与文件偏移地址的映射)PE文件头DOS头DOS存根NT头IMAGE_FILE_HEADER FileHeader文件头IMAGE_OPTIONAL_HEADER32 OptionalHeader 可选头节区头PE文件格式的应用IAT导入地址表EAT导出地址表工具PEView.exe PE文件格式 PE文件是指32位...

qq_24601427的博客 2615
上一篇: 函数调用规则的不同对回调函数使用的影响
下一篇: 映射MAP与映像IMAGE
tomorrowsprogress
博客等级 码龄20年 16粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值