You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过函数地址获取模块全局变量的地址及偏移量?

问题

已知某函数的地址,能否获取以下模块全局变量的地址?若可以,请问如何获取它们的偏移量?

const char* BotArgs[4]
bool UseBotArgs

附IDA反汇编信息:

  • 截图1(mp.dll):显示全局变量BotArgs、UseBotArgs在mp.dll中的内存地址标注
  • 截图2(mp.dll & cs.so代码):展示代码中引用这些全局变量的指令逻辑
解答

可以通过已知函数地址获取这两个全局变量的地址,具体方法如下:

1. 推导模块基址

从已知函数地址反推其所属模块(此处为mp.dll)的基址:
模块基址 = 已知函数地址 - 该函数在模块内的偏移量
函数的模块内偏移可在IDA的函数窗口或调试器模块信息中查看。

2. 获取全局变量的模块内偏移

  • 直接读取法:从IDA截图1中可直接获取变量的模块内偏移(例如截图中BotArgs偏移为0x001E70C0,UseBotArgs偏移为0x001E70E0,以实际标注为准)。
  • 指令反推法:若没有直接标注,可通过截图2中引用变量的指令计算。比如代码中访问全局变量的lea/mov指令会包含变量的内存地址,用该地址减去模块基址,即可得到变量的模块内偏移。

3. 计算全局变量实际地址

全局变量实际地址 = 模块基址 + 变量的模块内偏移

示例计算

假设mp.dll加载基址为0x10000000,BotArgs的模块内偏移是0x001E70C0,则BotArgs实际地址为:
0x10000000 + 0x001E70C0 = 0x101E70C0
同理,UseBotArgs实际地址为模块基址 + 其对应偏移量。

此外,也可通过函数与变量的相对偏移计算:用已知函数的实际地址减去其模块内偏移得到基址,再叠加变量偏移即可得到目标地址。

内容的提问来源于stack exchange,提问作者Hattrick HKS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:01:03