现在,我知道以前可能有人问过类似的问题,相信我,在过去的几天里,我一直在互联网上寻找一个已经得到解答的情况,但是我仍然无法让它起作用,老实说,我不知道为什么它不起作用。我想做的是在游戏中获得弹药的价值。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;发布于 2017-04-20 21:15:38
阅读MSDN关于函数ReadProcessMemory的文章,我注意到的第一件事是:
要读取的整个区域必须是可访问的,否则操作失败。
我建议的第一件事是检查这些调用的返回值。我很肯定他们都会返回0来表示“失败”,所以接下来要做的就是打电话给GetLastError,找出它为什么会失败。
一旦你弄明白了,你就能修好它了。更有可能的问题是,您的程序没有足够的权限来访问另一个进程的内存。
快速搜索弹出这篇关于如何正确访问其他进程的内存的OS文章:如何访问其他进程的内存?
https://stackoverflow.com/questions/43529643
复制相似问题