IDA技巧(113)image-relative-offsets-rva

admin 2025年2月18日21:09:53评论7 views字数 911阅读3分2秒阅读模式

Image-relative Offsets 表示当前模块(镜像)在内存中从image base开始的偏移量。

这意味着它们可以用于引用同一模块中的其他位置,而不管其实际的最终加载地址,因此可以用于使代码位置无关(PIC),类似于self-relative offsets。

RVA 的另一个名称是“Relative virtual address”,通常在 PE 文件格式的上下文中使用。

然而,RVA 的优势不仅仅在于 PIC。例如,在 x64-bit platforms 上,RVA 值通常使用 32 bits 而不是像完整指针那样的 64 bits。虽然这使得它们的范围更有限(从 imagebase 开始的 4GiB),但在整个二进制文件中,指针类型值的节省可以是相当可观的。

对于已知的 RVA 值,例如在 PE headers 或 EH structures 中的那些,IDA 通常可以自动将它们转换为 assembler-specific expression:

IDA技巧(113)image-relative-offsets-rva

然而,有时可能需要手动进行转换,例如在处理 IDA 尚未处理的文件格式更新,或使用 RVA 进行寻址的自定义格式/结构时。在这种情况下,您可以使用User-defined offset的另一种变体。

需要开启的选项是Use image base as offset base。启用后,IDA 将忽略输入的偏移基数,并始终使用 imagebase。

IDA技巧(113)image-relative-offsets-rva

然而,即使在 64 位程序中使用这种方法,您可能无法达到预期效果:值将以红色显示以指示错误,并且不会显示带有最终地址的漂亮表达式。

IDA技巧(113)image-relative-offsets-rva

这是因为命令默认使用 OFF32 处理 32 位值,但最终地址不适合 32 位。解决方法很简单:选择 OFF64 而不是 OFF32。

IDA技巧(113)image-relative-offsets-rva
IDA技巧(113)image-relative-offsets-rva

注意:对于 ARM binaries,使用 imagerel 关键字而不是 rva

学习资源

立即关注【二进制磨剑】公众号

👉👉👉【IDA 技巧合集】👈👈👈
👉👉👉【Github 安全项目合集】👈👈👈
【课程完结!内容揭秘!】7 天打造 IDA 9.0 大师:从零基础到逆向精英
【课程完结!内容揭秘】第 2 期-Android 逆向内核攻防
【硬核来袭!】程序分析与反混淆【已完结】

原文始发于微信公众号(二进制磨剑):IDA技巧(113)image-relative-offsets-rva

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月18日21:09:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   IDA技巧(113)image-relative-offsets-rvahttps://cn-sec.com/archives/3751516.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息