首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏每月技术成长

    RVA23 profile

    user-mode(RVA23U64)和 s-mode(RVA23S64)profile.RVA23U64 ProfileThe RVA23U64 profile specifies the ISA RVA23U64 Mandatory ExtensionsThe following mandatory extensions were present in RVA22U64.RVA22U64包含以下强制 RVA22U64 中是可选的。 in RVA23U64.RVA23S64 的强制 unprivileged extensions 包括 RVA23U64 中的所有强制的 unprivileged extensions。 RVA23 hypervisor 也可以选择实现不兼容 RVA23 的 guest VMs(例如,缺少 H,或仅 RVA20)。

    1K10编辑于 2025-03-06
  • 来自专栏每月技术成长

    RVA profile overview

    profiles and not other types of profile本文件旨在仅讨论RVA配置文件,而不是其他类型的配置文件。 the profiles' TG specifically regarding the RVA series of profiles.本文档提供了RISC-V RVA profile 结构和术语的介绍和基本原理 它基于第一个经过批准的RVA配置文件,并进一步讨论了RVA系列 profiles 的 TGRVA Profiles RationaleRISC-V was designed to provide a highly 但RVIA可以通过RVA profiles使硬件厂商在每一代中支持一组共同的特性。 (RVA profiles最终可能需要废弃先前强制的指令,但在不久的将来这是不太可能的。)

    33900编辑于 2025-03-06
  • 驱动开发:PE导出函数与RVA转换

    在笔者上篇文章《驱动开发:内核扫描SSDT挂钩状态》中简单介绍了如何扫描被挂钩的SSDT函数,并简单介绍了如何解析导出表,本章将继续延申PE导出表的解析,实现一系列灵活的解析如通过传入函数名解析出函数的RVA 首先实现GetRvaFromModuleName()函数,当用户传入参数后自动将函数名解析为对应的RVA偏移或Index下标索引值,该函数接收三个参数传递,分别是wzFileName模块名,FunctionName to sign one's name on a piece of work // PowerBy: LyShark // Email: me@lyshark.com // 从指定模块中得到特定函数的RVA = (ULONG)AddressOfFunctions[*AddressOfNameOrdinals]; // DbgPrint("索引 [ %p ] 函数名 [ %s ] 相对RVA [ % DbgPrint("NtReadFile RVA = %p \n", get_rva); // 函数分别传入 [模块路径,函数名,标志=0] 返回该导出函数的ID下标 ULONG64 get_id

    38430编辑于 2023-10-11
  • 驱动开发:PE导出函数与RVA转换

    在笔者上篇文章《驱动开发:内核扫描SSDT挂钩状态》中简单介绍了如何扫描被挂钩的SSDT函数,并简单介绍了如何解析导出表,本章将继续延申PE导出表的解析,实现一系列灵活的解析如通过传入函数名解析出函数的RVA 首先实现GetRvaFromModuleName()函数,当用户传入参数后自动将函数名解析为对应的RVA偏移或Index下标索引值,该函数接收三个参数传递,分别是wzFileName模块名,FunctionName right to sign one's name on a piece of work// PowerBy: LyShark// Email: me@lyshark.com// 从指定模块中得到特定函数的RVA ){TargetOff = (ULONG)AddressOfFunctions[*AddressOfNameOrdinals];// DbgPrint("索引 [ %p ] 函数名 [ %s ] 相对RVA ,Index索引,调用效果如下;图片第二个函数GetModuleNameFromRVA()则实现传入RVA或者函数Index序号,解析出函数名,具体实现方法与如上函数基本一致,仅仅只是在过滤时做了调整。

    36960编辑于 2023-06-07
  • PE结构:VA&RVA&FOA 转换复习

    计算实际装入地址 VA imagebase (映像基址) + RVA(虚拟入口) => 0x400000 + 0x5d485 = 0x45d485 载入 od 验证 节取虚拟地址范围区间: 虚拟地址开始位置 : imagebase + .text节RVA => 0x400000 + 0x00001000 = 401000 虚拟地址结束位置:imagebase + .text节尺寸 => 401000 + 0x0007B0DE = 0x47C0DE .text节结束地址 od 验证 0x47c0de 在 0x47d000 之前,属于text节 虚拟地址RVA 对应到文件中的FOA位置: 以计算 0045D485 RVA(相对便宜) = VA - .text首地址 => 0045D485 - 401000 = 5C485 FOA(文件偏移) = RVA + .text节的文件偏移 0x00001000 = 5C485 文件偏移转为RVA 计算文件偏移 5d480 对应到虚拟VA中的位置。

    76920编辑于 2022-12-28
  • 来自专栏逆向技术

    PE知识复习之PE的RVA与FOA的转换

    例如 0x00401000 RVA: RVA就是相对虚拟偏移. 就是偏移地址. 例如 0x1000. 虚拟地址0x00401000的RVA就是 0x1000. 根据上方我们得出的RVA.然后我们就在文件中从开头数RVA个字节,去寻找我们的这个数据.这样是不行的.因为文件对齐跟内存对齐是不一样的.所以我们要考虑对齐方式. 如果RVA属于头(DOS+NT)那么不需要进行计算了.因为头在文件中根内存中都是一样展开的.直接从开始位置寻找到RVA个字节即可.     如果不在头,就要判断在那个节里面. 就知道我们的RVA距离节数据开始位置的偏移. 思路:   1.计算出RVA. RVA怎么计算我们也知道了.我们需要查看PE中扩展头的ImageBase成员的值. 这里我已经查看好了.值为0x400000.

    1.5K20发布于 2019-05-25
  • 来自专栏方亮

    PE文件和COFF文件格式分析——RVA和RA相互计算

    那我们PE文件中对数据的表述是使用RA还是RVA呢?大体可以总结如下:如果要在内存中运行和使用的数据大部分是使用RVA描述的。如果只是文件信息,程序运行时不关心的数据使用RA描述的。 现在假如RVA落在内存的SectionBStart和SectionBEnd之间,则我们可以计算出RVA于SectionBStart的偏移OffsetBSection。 计算出RA的过程,而通过RA计算出RVA只是这样一个逆向过程。 刚接触这块的同学可能会存在一个误区:比如他知道RVA=0x00002100,还知道这个RVA对应的RA=0x00002200。于是可能会想当然的认为该文件的RA = RVA + 0x100。 于是他下次遇到RVA=0x00008000时就认为其对应的RA=RVA+0x100=0x00008100!!

    1K30发布于 2019-01-16
  • 来自专栏Eureka的技术时光轴

    PE格式第三讲扩展,VA,RVA,FA的概念

    RVA = VA - 401000 得出的就是相对于虚拟地址的偏移 简化 RVA = 401200 - 401000 = 200(RVA) 那么偏移就是200了 四丶FA(RAW)(File Address 五丶VAtoRaw(虚拟地址,转化为文件偏移位置,就是虚拟地址的代码,在文件那个偏移位置存储) 首先你要明白 RVA 怎么计算,FA怎么看. 我们随便找一个PE文件(我用最小的标准PE) ? 大于401000,小于402000,所以节区属于代码区,也就是.text这个区域 3.算出RVA(相对虚拟地址偏移) RVA = VA - 内存中节区地址 代入得到: RVA = 40101A - 401000 RVA = 1A (相对虚拟地址偏移是1A) 4.RVA + 文件中的(相同节表,比如上面是.text,那么文件中看的节表就是.text这个节表)节表中的PointerToRawData成员记录的大小 总结:   其实很简单,首先看属于哪个节表的, 那么先算出RVA的值,然后让RVA + 文件中相同节表中的成员(PointRawData) 那么最终就是虚拟地址代码,在文件偏移的位置.

    2.1K20发布于 2019-07-24
  • 来自专栏逆向技术

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

              PE格式第三讲扩展,VA,RVA,FA的概念 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边都是. RVA = VA - 401000  得出的就是相对于虚拟地址的偏移 简化 RVA = 401200 - 401000 = 200(RVA)  那么偏移就是200了 四丶FA(RAW)(File Address 五丶VAtoRaw(虚拟地址,转化为文件偏移位置,就是虚拟地址的代码,在文件那个偏移位置存储) 首先你要明白 RVA 怎么计算,FA怎么看. (相对虚拟地址偏移) RVA = VA - 内存中节区地址 代入得到: RVA = 40101A - 401000  RVA = 1A   (相对虚拟地址偏移是1A) 4.RVA + 文件中的(相同节表 总结:   其实很简单,首先看属于哪个节表的,  那么先算出RVA的值,然后让RVA + 文件中相同节表中的成员(PointRawData)  那么最终就是虚拟地址代码,在文件偏移的位置.

    1.7K50发布于 2018-01-08
  • PE格式:实现VA与FOA之间的转换

    图片接着我们需要得到 .text节 基地址以及 .text节 RVA,如下命令即可获取到。 图片RVA(相对偏移) = VA - (.text节首地址) => 0040158B - 00401000 = 58BFOA(文件偏移) = RVA + .text节对应到文件中的偏移 => 58B + 相对地址转换为FOA文件偏移: RVA就是相对地址,将相对地址转换为FOA文件内偏移,例如将158b转换为FOA。 首先计算RVARVA = pSectioneach.VirtualAddress + (dwFOA - pSectioneach.PointerToRawData);RVA = 虚拟偏移 + (98B 先来演示一下VA转换为RVA的过程,将VA地址40158B转换为FOA地址是多少?

    58100编辑于 2022-12-24
  • PE格式:实现VA与FOA之间的转换

    接着我们需要得到 .text节 基地址以及 .text节 RVA,如下命令即可获取到。 RVA(相对偏移) = VA - (.text节首地址) => 0040158B - 00401000 = 58B FOA(文件偏移) = RVA + .text节对应到文件中的偏移 => 58B + 相对地址转换为FOA文件偏移: RVA就是相对地址,将相对地址转换为FOA文件内偏移,例如将158b转换为FOA。 首先计算RVARVA = pSection[each].VirtualAddress + (dwFOA - pSection[each].PointerToRawData); RVA = 虚拟偏移 先来演示一下VA转换为RVA的过程,将VA地址40158B转换为FOA地址是多少?

    59810编辑于 2022-12-28
  • 来自专栏MasiMaro 的技术博文

    PE文件详解(五)

    在前面几节中经常提到相对虚拟地址RVA,在这篇博客中主要说明这个概念。 ,所以,这篇我就自己根据自己掌握的情况来写,还是在此处放上原文的连接: 原文(上)传送门 原文(下)传送门 什么是RVA 某个位置的RVA是该位置在内存中的地址相对于整个文件在内存中首地址的偏移值 - 0x00400000 = 0x871234 RVA到文件偏移的转化 有了RVA之后,发现所有数据在内存中进行索引都十分的方便,只要有了基地址和RVA后,通过基地址 + RVA就可以找到对应的数据, ),如果Rva小于这个值得话,说明是落在这个节中 2. 在磁盘中的入口位置,即0x0001B1C4这个RVA对应在磁盘中的位置 一个个对比发现 .textbss: 这个区块的RVA从0x00001000~0x00011000,这个值不在这个区块内

    67620发布于 2018-08-31
  • 来自专栏MasiMaro 的技术博文

    PE解析器的编写(四)——数据目录表的解析

    RVA到fRva的转化 RVA转化为fRva主要是通过某个数据在内存中的相对偏移地址找到其在文件中的相对偏移地址,在对某个程序进行逆向时,如果找到关键的那个变量或者那句指令,我根据变量或者代码指令在内存中的 RVA找到它在文件中的偏移,就可以找到它的位置,修改它可能就可以破解某个程序。 + 区块大小也就说明这个RVA是处在这个区块中,这样我们就找到RVA所在区块,用RVA - 区块起始地址就得到它在区块中的偏移,这个偏移加上区块在文件中的首地址,得到的就是RVA对应的在文件中的偏移, 在这段代码中主要显示了函数的Thunk的rva,这个rva转化后对应的值,函数名,以及里面的Hint 导出表的解析 一般的exe文件不存在导出表,只有在dll中存在导出表。 ,数组中的每一项是一个RVA 值,存储的是所有导出函数的入口地址,数组的元素个数等于NumberOfFunctions AddressOfNames:这个RVA指向一个包含所有导出函数名称的表的指针

    1.8K20发布于 2018-08-31
  • 来自专栏逆向技术

    PE知识复习之PE的导入表

    第二项保存的就是导入表的 RVA 以及大小. 如下图所示: ? EXE文件.没有导出表.有一个导入表. RVA 是 0x1A1C0 位于节Text中. 那么这个成员就是记录了.我要依赖的模块的名字是什么.是一个RVA属性. RVA指向了一个ASCII码字符串.以0结尾. 因为在文件中导入表并没有.所以我们直接在内存中查看. 我们下一张导入表的 依赖模块的模块名称的 RVA 属性是 0x1A75A VA = Imagebase + RVA = 41A75A ? 不是1, 那么就是一个RVA. 指向了一个 IMAGE_IMPROT_BY_NAME 结构. 以一个导入表为例 ? INT的 RVA 为 1A2A8 VA = 41A2A8 ? 是一个RVA .注意是直接指向.   3.INT IAT表.的RVA 都是定位INT IAT表位置. 定位的位置是INT IAT表.这个表存储的才是数据

    1.5K20发布于 2019-05-25
  • C/C++ PeView 结构解析器

    类型 重定位RVA 重定位地址 修正RVA ----------------------------------------------------------------- : 00011000 块长度: 0200 重定位个数: 0096 起始RVA: 00012000 块长度: 0292 重定位个数: 0142 起始RVA: 00013000 块长度: 0296 重定位个数: 0144 起始RVA: 00014000 块长度: 0108 重定位个数: 0050 起始RVA: 00016000 ------------------------------------------ 查询重定位页内分页: 用于查询重定位RVA页内的页,此功能需要得到RVA时再使用。 -------- 起始RVA 类型 重定位RVA 重定位地址 修正RVA -----------------------------------------

    71630编辑于 2022-12-28
  • 21.1 使用PEfile分析PE文件

    ,如下代码中RVAToFOA可将一个RVA相对地址转换为FOA文件偏移,FOAToRVA则可实现将一个FOA文件偏移转换为RVA先对地址,当然PeFile模块内也提供了get_rva_from_offset 实现从FOA转RVA,get_offset_from_rva则是从RVA到FOA,读者可自行选择不同的转换方式。 import pefile# 将RVA转换为FOA的函数def RVAToFOA(pe,rva): for item in pe.sections: Section_Start = return -1# 内部功能实现FOA->RVA互转def inside(pe): # 从FOA获取RVA 传入十进制 rva = pe.get_rva_from_offset(3952 ) print("对应内存RVA: {}".format(hex(rva))) # 从RVA获取FOA 传入十进制 foa = pe.get_offset_from_rva(rva)

    84660编辑于 2023-08-10
  • 来自专栏全栈程序员必看

    PE文件结构(四) 输出表

    IMAGE_OPTIONAL_HEADER中的 DataDirectory[0] 提供了输出表的RVA。输出表是以一个IMAGE_EXPORT_DIRECTORY结构 開始的。 一般为0 WORD MinorVersion; //次版本,一般为0 DWORD Name; //指向dll名的RVA DWORD AddressOfNames; // 函数名字数组EAT的RVA DWORD AddressOfNameOrdinals; // 输出序列号数组的RVA RVA 4498h 文件偏移值:3898h AddressOfNameOrdinals: RVA 5008h 文件偏移值:4408h 查看ENT数组所指向的字符串 图片2 再查看EAT中序号为1的元素(即第2个元素)值为021140h,这个就是AdjustWindowRect函数的RVA

    50520编辑于 2022-07-06
  • 21.1 Python 使用PEfile分析PE文件

    ,如下代码中RVAToFOA可将一个RVA相对地址转换为FOA文件偏移,FOAToRVA则可实现将一个FOA文件偏移转换为RVA先对地址,当然PeFile模块内也提供了get_rva_from_offset 实现从FOA转RVA,get_offset_from_rva则是从RVA到FOA,读者可自行选择不同的转换方式。 import pefile# 将RVA转换为FOA的函数def RVAToFOA(pe,rva): for item in pe.sections: Section_Start = return -1# 内部功能实现FOA->RVA互转def inside(pe): # 从FOA获取RVA 传入十进制 rva = pe.get_rva_from_offset(3952 ) print("对应内存RVA: {}".format(hex(rva))) # 从RVA获取FOA 传入十进制 foa = pe.get_offset_from_rva(rva)

    1.5K21编辑于 2023-10-19
  • 来自专栏作图丫

    不仅仅是火山图,你可以获得更多可视化结果!

    RVA”是一个功能集合,可有效地可视化RNAseq差异表达的分析结果,并利用Fisher精确测试方便有效地评估基因集或通路富集。 R包链接 https://github.com/THERMOSTATS/RVA 功能介绍 RVA包能够实现cutoff预置下保留差异基因数目的可视化,并且能够轻松绘出QQ图、火山图、基因富集分析以及基因表达热图 功能示例 01 R包安装和加载 devtools::install_github("THERMOSTATS/RVA_prod") #GitHub安装RVA_prod没成功,可能是版本失效了,可以尝试 devtools::install_github("THERMOSTATS/RVA") library(RVA) 02 cutoff阈值的差异基因数目展示,方便观察保留的差异基因数目 #加载测试数据 df <- RVA::Sample_summary_statistics_table df1 <- RVA::Sample_summary_statistics_table1 d1 <- list(df

    69920编辑于 2022-03-29
  • 来自专栏逆向技术

    PE格式第四讲,数据目录表之导入表,以及IAT表

    节区表首地址  + pointerToRawData的大小  = 502008 - 502000 + 400  = 8 + 400 = 408 (文件偏移处) 看下文件偏移处 可以看出,205C是一个RVA 首先我们猜测一下 1.应该有函数名,因为根据函数名才可以在DLL中使用(当然也可以是序号,但是不兼容) 2.猜测应该有DLL名称,要根据这个DLL才可以加载这个函数名 3.猜测应该会有存放IAT表格的RVA ; 看图: 按照第一个偏移结构体来算,那么 双字最高位为0,表示导入符号是一个数值,是一个RVA数值(比如我们的Msg可以利用符号导入) 双字最高位为1,那么表示导入的符号是一个名称(比如Msg的名字) 三丶定位导入表  在数据目录中,记录的是导入表的RVA偏移 那么我们通过公式计算一下在文件中的偏移 这里使用标准PE 在数据目录中找到偏移为  2010  RVA = 2010 位置 现在找模块地址 模块地址在 选项头(或者叫做扩展头)的成员ImageBase中存储着 ,现在是00401000 那么现在要找节表 节表中记录了虚拟地址的RVA  也就是虚拟地址和模块首地址的RVA,我们则可以快速定位是哪个节表了

    1.7K50发布于 2018-01-08
领券