【问题标题】:Stuck at reading offset/pointer卡在读取偏移量/指针上
【发布时间】:2012-01-28 13:49:41
【问题描述】:

我正在读取这样一个进程的内存:

int MEM_BATTLESPEED_ADDR = 0x12EC900; // <- this is a static address
int MEM_battleSpeed;
if (ReadProcessMemory(hProcess,(void *) MEM_BATTLESPEED_ADDR, &MEM_battleSpeed, 4, NULL))   
{
   cout << "MEM_battleSpeed: " << MEM_battleSpeed << "\r\n"; 
}

地址是静态的,所以当我重新启动应用程序时它永远不会改变。我可以毫无问题地阅读这个。没关系。

我的问题是,有些地址不是静态的。我知道偏移量和指针,但我不知道如何阅读以下内容:

[Info]
$Static   = 0x12BCAC8
$Offset_1 = 0x07F8
$Offset_2 = 0x000C
$Offset_3 = 0x0284

如何读取 [Info] 值?

【问题讨论】:

  • 偏移量是从 $Static 开始的吗?
  • 是的,它们是 4 个字节。此外,它们在 C.E 中看起来像这样:i.imgur.com/hSs6K.png
  • “它们是 4 个字节”是什么意思?偏移量远大于此。你的意思是$Offset_1、$Offset_2和$Offset_3的值应该被解释为内存地址$Static的偏移量,是4字节的倍数?

标签: c++ memory pointers process offset


【解决方案1】:

将偏移量添加到指针的内容中会得到您想要的地址:

Static   = 0x12BCAC8;
Offset_1 = 0x07F8;

ReadProcessMemory(hProcess,(void *) (Static + Offset_1), &value, 4, NULL);

【讨论】:

  • 当我尝试 Static + Offset_1 时,它会自动打印十进制值。它会工作吗,因为我还不能让它工作。始终读取 0。
  • 我只看你发布的图片。指针的偏移地址只是两者的总和。如果它不是你想要的,那么你的静态值不是真正的指针或者偏移量不是字节。
猜你喜欢
  • 2015-07-09
  • 2016-12-30
  • 2023-01-27
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多