具有多个偏移量的写入进程内存C++

WriteProcessMemory with multiple Offsets C++

本文关键字:进程 内存 C++ 偏移量      更新时间:2023-10-16

我最近在用 c++ 写入进程内存时遇到了一个非常烦人的问题......我无法写入具有多个偏移量的进程内存!尽管有数千页解释您如何解决此问题,但它似乎仍然不适合我。我整天都在谷歌上搜索,找到了很多如何解决这个问题的例子,但它似乎仍然不适合我。

所以,让我先解释一下我是如何自己写来处理记忆的,之后你可以纠正它。

假设我的基址为: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 个偏移量,例如在本例中,我将一次将每个偏移量添加到基址,直到我得到一个值来存储添加到基址的每个偏移量。 这显然不起作用,我该怎么办!?

我无法用您的描述回复所有内容,但是在MSDN中,他们说ReadProcessMemory从要求它的地方读取内存到给定的缓冲区。这意味着当您致电...

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

。您的"指针"将填充"基本"地址中的内容。因此,它将包含一个地址,该地址在数字上是地址"base"处四个字节的值。这可能不是你想要的,因为如果你以前没有在那里存储过一些东西,它是不确定的。如果是这样,当您使用"指针"时,它可能会崩溃。

如果你想用这个函数读取地址"base + offset1"的内存,你需要做的是:

ReadProcessMemory(handle, LPVOID(base + offset1), some_buffer, some_buffer_size, 0);

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