VA&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)。此时必须通过重定位(Relocation)将其加载到其它空白的位置,若PE头信息使用的是VA,则无法正常访问。因此,使用RVA来定位信息,即使发生了重定位,只要相对于基准位置的相对地址没有变化,就能正常访问到指定信息,不会出现任何问题。

提示:

32 位 Widows OS 中,各进程分配有 4GB 的虚拟内存,因此,进程中 VA 值的范围是 0000 0000 ~ FFFF FFFF。

RVA to RAW

PE文件加载到内存时,每个节区都要能准确完成内存地址与文件偏移间的映射。这种映射一般称为 RVA to RAW,方法如下:

  1. 查找RVA所在节区。
  2. 使用简单的公式计算文件偏移(RVA)。

根据IMAGE_SECTION_HEADER结构体,换算公式如下:

RAW - PointerToRawData = RVA - VirtualAddress

进而得:

RAW = RVA - VirtualAddress + PointerToRawData

Preference

逆向工程核心原理 \(P_{92}\) \(P_{104}\)

就这这个帖子理解 RVA、VA、RAW、偏移量

原文地址:https://www.cnblogs.com/doctorx/p/9834702.html

时间: 2024-08-30 12:17:58

VA&RVA 和 RVA to RAW的相关文章

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

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

对文件地址的几种概念的理解

基地址:文件的实际装入内存地址.模块首址(大多数情况下为模块句柄.loadlibrary或getmodulehandle函数返回的整数) RVA:文件在内存中相对虚拟地址.相对于基地址的偏移量 VA:文件在内存中的虚拟地址.或叫文件内存中的实际地址(4g内存逻辑空间中的实际地址.非内存物理地址) 计算: VA = 基地址 + RVA; RAW: 文件外设相对地址 .............................................

深入学习PE文件(转)

PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. 基本结构. 上图便是PE文件的基本结构.(注意:DOS MZ Header和部分PE header的大小是不变的:DOS stub部分的大小是可变的.) 一个PE文件至少需要两个Section,一个是存放代码,一个存放数据.NT上的PE文件基本上有9个预定义的Section.分别是:.text, .bss, .rdata, .data, .rsrc,

解析PE文件

最近在自学解析PE文件,根据小辣椒(CFF Explorer)以及各论坛上大佬的帖子,做了个黑屏打印PE文件的,历时7天完成,在此想跟有相关需要的同学们分享下思路,有不足之处也希望大家不吝赐教,指点出来.谢谢. PE文件主要有DOS头,NT头(包含PE头,可选PE头,可选PE头中又包含着一个数据目录,里面包含了其他表单的RVA和大小),节表 表单主要有导出表,导入表,重定位表,资源表.除了资源表外,其他表单的各项数据都用代码实现了打印. 首先通过CreateFile打开文件,获得文件句柄,随后调

Dotnet文件格式解析

0x0.序 解析过程并没有介绍对pe结构的相关解析过程,网上此类相关资料很多可自行查阅,本文只介绍了网上资料较少的从pe结构的可选头中的数据目录表中获取dotnet目录的rva和size,到完全解析dotnet文件格式特有数据结构的部分. 了解dotnet文件格式你可能需要一款名为CFF Explorer的工具:你也可能在很多时候需要查阅书籍<Expert .NET 2.0 IL Assembler>,该书籍的中文版本名为<.NET探秘MSIL权威指南>.简要的文件格式图,可以参考

HookEngine源码

unit uSection; interface uses Windows, Classes, SysUtils, uTypes, uCodeSize; function AddSection(FileName: string; Info: PRecInfo; SectionSize: Word): Boolean; var LOAD_ORION_NEW: array [0 .. 50] of Byte = ( $68, // PUSH $1A, $5E, $75, $00, // main_e

初步了解PE分析

尝试编写代码获取PE文件的信息. 首先使用 CreateFile打开一个PE文件并返回一个用于访问该对象的handle. HANDLE CreateFile( LPCTSTR lpFileName, // pointer to name of the file DWORD dwDesiredAccess, // access (read-write) mode DWORD dwShareMode, // share mode LPSECURITY_ATTRIBUTES lpSecurityAtt

学习:脱壳之Anti Dump

文章继:https://www.cnblogs.com/zpchcbd/p/12111567.html 发现转储之后,然后修复IAT发现依然是打不开的,原因是壳有反脱壳的检测 把修复完IAT的程序继续载入,F8跟随,发现JMP的区段已经不存在了 我们再看下原程序的AC区段,发现是存在的,所以我们需要把这个原程序中的AC区段拷贝一份,在脱壳后的程序中进行填充 然后填充到脱壳后的程序中 因为是直接把原程序的AC片段直接拷贝的,所以还需要修改下虚拟的偏移地址 默认情况下,EXE文件的基址为0x0040

遍历导出表(上课代码)

// 01 遍历导出表.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "windows.h" //************************************ // Method: IsPeFile // FullName: IsPeFile // Access: public // Returns: bool 成功失败 // Qualifier: // Parameter: TCHAR * s