我尝试读取一个名为“韦诺”的游戏的进程内存。但是当我调试它时,bytes_read 和 gold_value 的值都设置为 0。
但是当我进入作弊引擎并粘贴黄金值(0x017EED8)的指针时,它给了我值(252187896)。
所以我猜有问题导致程序无法读取黄金值。
我多次尝试重新启动程序,但每次 gold_value 和 bytes_read 的值都为 0。
代码:
int main(int argc, char** argv) {
HWND wesnoth_window = FindWindow(0, L"The Battle for Wesnoth - 1.14.9");
DWORD process_id = 0;
GetWindowThreadProcessId(wesnoth_window, &process_id);
HANDLE wesnoth_process = OpenProcess(PROCESS_ALL_ACCESS, true, process_id);
DWORD gold_value = 0;
DWORD bytes_read = 0;
ReadProcessMemory(wesnoth_process, (void*)0x017EED8, &gold_value, 4, &bytes_read);
return 0;
}
要读取的地址是相对于目标进程基地址的偏移量。 当调用
ReadProcessMemory()
时,你必须给它一个绝对地址。 因此,您需要检索进程的基地址,然后向其添加所需的偏移量。