分解读取多个偏移的ReadProcessMemory函数

时间:2015-04-02 23:05:16

标签: c++ winapi

我试图找出最合理的逐步读取偏移量的方法,这是我目前正在处理的代码。

    DWORD BaseOFFSET = 0x000000;
    DWORD address2 = ReadProcessMemory(pHandle, (void*)(BaseOFFSET + 0x50),0, sizeof(DWORD), 0); //50 doors down in baseoffset
    DWORD address3 = ReadProcessMemory(pHandle, (void*)(address2 + 0x0500),0, sizeof(DWORD), 0); // address 3 is address2 + another 500 doors down the line
    DWORD address4 = ReadProcessMemory(pHandle, (void*)(address3 + 0x140),0, sizeof(DWORD), 0); // and so on...
    DWORD address5 = ReadProcessMemory(pHandle, (void*)(address4 + 0x100), 0, sizeof(DWORD), 0); //Final offset is stored in address5

因为我知道浮点数存储在最终地址中,所以我会用它来判断地址中的值

float* Data = (float*)(&address5);
    if (Data != nullptr)
        Sleep(2000);
    cout << *Data << std::endl;

我在那里睡觉(2000),因为它有一个长循环检查地址中的值以查看它是否发生变化,并且取决于变化我会做不同的事情。代码编译并运行正常,但返回的值是错误的,当我在循环中进行cout时,我得到0。

1 个答案:

答案 0 :(得分:0)

首先,您使用ReadProcessMemory错误。失败返回0,成功返回1。你得到了零,因为它失败了,可能是因为你为输出指针传递了一个null(0),这不是可选的。

其次,您不能直接使用其他进程的指针(在您的示例中尝试使用*Data)。您需要使用您获得的外部指针调用ReadProcessMemory来读取其他进程上下文中的指向数据。