在具有多级指针和偏移的C++中使用WriteProcessMemory()
Using WriteProcessMemory() in C++ with Multilevel Pointers and Offsets?
WriteProcessMemory()
的一个参数显然要求指向基地址的指针。但如果它是一个多级指针呢?例如,假设我必须找到一个指针三次才能最终得到静态地址,第一个偏移量是0,第二个偏移量57,第三个偏移量268。现在,如果我想写到那个确切的位置,我该如何将偏移量包括在WriteProcessMemory()
函数中?我必须包括所有三个偏移量,还是只包括最后一个导致我到达静态地址的偏移量?为了澄清问题,我基本上是在PC上的第一人称射击游戏中练习操纵记忆。我的目标并不是真的制造黑客或其他什么。我只是想练习把记忆写进一个过程中。(例如,我会尝试将新值写入"health"地址或"ammo"地址。)我主要想知道如何计算多级指针中的偏移量。
地址就是地址。如果你用多级指针(一个指向一个指针的指针)来访问它,那也没关系。
基址是你要写入的地址。你的多级指针指向的地址都在这个参数中。
lpBaseAddress
和你正在写入的数据量来写入指针值,并且你需要写入放置在内存中的数据。
如果您正在写入的结构中有指针,那么除非您将它们重写为正在写入的目标数据的一部分,否则它们将不起作用。
不能在对WriteProcessMemory()的调用中"包含"偏移量来遍历指针链。多级指针或指针链是指指向指向某个指针的指针。在大多数情况下,必须在每个指针被取消引用后添加相对偏移。
WriteProcessMemory只写入一个地址,它的目的是单一的。
但您必须取消引用每个指针并添加偏移量。要执行此操作,必须使用ReadProcessMemory。您可以使用此函数来遍历指针链,它将取消引用每个指针并正确添加偏移量:
uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
for (unsigned int i = 0; i < offsets.size(); ++i)
{
ReadProcessMemory(hProc, (BYTE*)ptr, &ptr, sizeof(ptr), 0);
ptr += offsets[i];
}
return ptr;
}
调用函数的示例如下:
uintptr_t ammoAddr = FindDMAAddy(hProcess, dynamicPtrBaseAddr, { 0x374, 0x14, 0x0 });
此函数的结果将是要读取或写入的变量的地址。剩下要做的就是根据您想要做的操作对ReadProcessMemory或WriteProcessMemory进行后续调用
- 没有找到相关文章