具有多个偏移量的写入进程内存C++
WriteProcessMemory with multiple Offsets C++
我最近在用 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是有效的缓冲区,则必须在某处声明。
相关文章:
- 可以读入进程内存的最大块大小是多少?
- 如何读取特定地址的进程内存?
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 读取进程内存多级指针(DLL 注入)
- 读取进程内存作弊引擎值
- 获取进程内存信息失败,错误 6 句柄无效
- c++ 读取进程内存基址 + 偏移量不起作用
- 如何编辑受保护的进程内存?
- 内核模式驱动程序可以在任何进程上执行读取进程内存吗?
- 如何获取进程内存的最小值和最大值?(C++)
- C++ - 读取进程内存到缓冲区,写入进程内存(同一缓冲区上的新值)将缓冲区恢复为旧值
- 读取进程内存 C++ 不会读取
- 尝试编写进程内存并获取用户定义的文字运算符未找到
- 具有多个偏移量的写入进程内存C++
- C++如何使用读取进程内存查找进程内存中使用的最后一个(偏移量 - 地址)
- 读取进程内存无法正常工作,使用 UTF16 字符串
- 读取进程内存上的错误 299
- 写入进程内存没有错误,它不会写入正确的地址
- 将进程内存转储到文件/从转储文件重新创建进程