【问题标题】:ReadProcessMemory - Adding 5 Offsets to a PointerReadProcessMemory - 向指针添加 5 个偏移量
【发布时间】:2017-04-20 20:48:13
【问题描述】:

现在,我知道以前可能有人问过类似的问题,相信我,在过去的几天里,我一直在互联网上寻找一个已经回答的情况,但是我仍然无法得到这个工作,老实说,不知道为什么它不工作。我试图做的是在游戏中获得弹药价值。 readMemory 是一个 int,应该包含这个值,但它只是输出 0。

    ReadProcessMemory(handle, (PBYTE*)(base_adr), &pAddress1, sizeof(pAddress1), 0);
    ReadProcessMemory(handle, (PBYTE*)(pAddress1 + offset_1), &pAddress2, sizeof(pAddress2), 0);
    ReadProcessMemory(handle, (PBYTE*)(pAddress2 + offset_2), &pAddress3, sizeof(pAddress3), 0);
    ReadProcessMemory(handle, (PBYTE*)(pAddress3 + offset_3), &pAddress4, sizeof(pAddress4), 0);
    ReadProcessMemory(handle, (PBYTE*)(pAddress4 + offset_4), &pAddress5, sizeof(pAddress5), 0);

    while (1)
    {
        ReadProcessMemory(handle, (PBYTE*)(pAddress5 + offset_5), &readMemory, sizeof(readMemory), 0);
        cout << readMemory << endl;
    }

显然,这不是添加指针的有效方式(我猜这也不是一种有效的方式),我正在寻找可以为我指明正确方向的人。谢谢,再次为(很可能在您看来)一个基本问题感到抱歉。

DWORD base_adr = 0xCC8408;
const DWORD offset_1 = 0x23C;
const DWORD offset_2 = 0x7A4;
const DWORD offset_3 = 0x34C;
const DWORD offset_4 = 0x5B0;
const DWORD offset_5 = 0x2D8;
DWORD pAddress1;
DWORD pAddress2;
DWORD pAddress3;
DWORD pAddress4;
DWORD pAddress5;

【问题讨论】:

  • 什么不起作用?
  • @RbMm 好吧,我正在尝试获取游戏中的弹药值,但是 'readMemory' (int) 输出为 0。将进行编辑以向大家澄清,抱歉。
  • @4Dimensions 建议设置一个包含简单数据结构的简单程序,以用作您的测试虚拟对象。当您可以读取和修改测试假人的内存时,就开始尝试操作“真实”程序。
  • 如果 api 失败 - 调用 GetLastError 以获取更多信息为什么。但更快的是你使用错误的地址
  • 如果您向我们展示pAddress1pAddress2 等的声明,将会有所帮助。向指针添加值需要知道您要添加的指针是什么。跨度>

标签: c++ pointers


【解决方案1】:

阅读关于函数ReadProcessMemory 的 MSDN 文章,我首先注意到的是:

要读取的整个区域必须是可访问的,否则操作将失败。

我建议的第一件事是检查这些调用的返回值。我很确定他们都返回 0 表示“失败”,所以接下来你要做的就是打电话给 GetLastError 找出失败的确切原因。

一旦你弄清楚了,你就可以修复它。问题很可能是您的程序没有足够的权限来访问另一个进程的内存。

快速搜索弹出这篇关于如何正确访问其他进程内存的操作系统文章:How is it possible to access memory of other processes?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2021-07-22
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2019-08-08
    相关资源
    最近更新 更多