WriteProcessMemory具有多个Offsets C ++

时间:2017-04-09 10:54:35

标签: c++ pointers memory

我最近在用c ++编写Process memory时遇到了一个非常讨厌的问题......我无法写入具有多个偏移的进程内存!即使有成千上万的页面解释你如何解决这个问题,它似乎仍然不适合我。我一整天都在谷歌上搜索,并找到了很多如何解决这个问题的例子,但它似乎对我不起作用。

所以,让我首先解释一下我自己是如何编写处理内存的,然后你可能会纠正它。

我们假设我有一个基地址:0x04AF3C94

第一个偏移为:0x1C

第二个偏移量为:0x20

第三个:0x568

第四名为:0x134

我自己如何做到这一点:

DWORD offset1 = 0x1C;
DWORD offset2 = 0x20;
DWORD offset3 = 0x568;
DWORD offset4 = 0x134;

DWORD base = 0x04AF3C94;
DWORD pointer;
DWORD pointer2;
DWORD pointer3;
DWORD pointer4;
DWORD pointer5;
ReadProcessMemory(handle, LPVOID(base), &pointer, sizeof(pointer), 0);
ReadProcessMemory(handle, LPVOID(pointer + offset1), &pointer2, sizeof(pointer2), 0);
ReadProcessMemory(handle, LPVOID(pointer2 + offset2), &pointer3, sizeof(pointer3), 0);
ReadProcessMemory(handle, LPVOID(pointer3 + offset3), &pointer4, sizeof(pointer4), 0);
ReadProcessMemory(handle, LPVOID(pointer4 + offset4), &pointer5, sizeof(pointer4), 0);

int value = 500;
WriteProcessMemory(handle, LPVOID(pointer5), &value, sizeof(value), 0);

正如你所看到的,如果我有4个偏移量,例如在这个例子中,我将每个偏移量一次添加到基地址,直到我得到一个值来存储添加到baseaddress的每个偏移量。 这显然不起作用,我该怎么做!?

1 个答案:

答案 0 :(得分:0)

我无法使用您的描述回复所有人,但在MSDN中,他们说ReadProcessMemory从请求到给定缓冲区的地方读取内存。这意味着当你打电话......

if(!empty($exploded_val[5])){//doAction}

...你的"指针"将充满"基地"地址。因此它将包含一个地址,该地址是数字地址为地址" base"的四个字节的值。这可能不是你想要的,因为如果你之前没有存储过某些东西,它就是不确定的。如果是这样,当你使用"指针"。

时,它可能会崩溃

如果你想阅读adresse" base + offset1"有了这个功能,你需要做的是:

ReadProcessMemory(handle, LPVOID(base), &pointer, sizeof(pointer), 0);

如果some_buffer是一个有效的缓冲区,你必须在某处声明。