现在,我知道之前可能会问过与此相似的问题,并且相信我,过去几天我一直在网上寻找已经回答的情况,但是我仍然可以'让这个工作,说实话,不知道为什么它不起作用。我试图做的是在游戏中获得弹药值。 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;
答案 0 :(得分:0)
阅读有关函数ReadProcessMemory的MSDN文章,我注意到的第一件事是:
必须可以访问要读取的整个区域或操作失败。
我建议的第一件事是检查这些调用的返回值。我很确定他们都会0
返回“失败”,所以接下来你要打GetLastError来找出失败的原因。
一旦你弄明白,你就能解决它。更有可能的问题是你的程序没有足够的权限来访问另一个进程的内存。
快速搜索这篇操作系统文章,介绍如何正确访问其他进程的内存:How is it possible to access memory of other processes?