使用 ReadProcessMemory() 和 WriteProcessMemory() 访问内存中的值¶
清单 6-4 中的代码展示了你可能如何使用这些函数访问内存中的值。
DWORD val;
ReadProcessMemory(proc, adr, &val, sizeof(DWORD),
0);
printf("Current mem value is %d\n", val);
val++;
WriteProcessMemory(proc, adr, &val, sizeof(DWORD),
ReadProcessMemory(proc, adr, &val, sizeof(DWORD),
0);
printf("New mem value is confirmed as %d\n", val);
清单 6-4:使用 Windows API 读写进程内存
在这样的代码出现在程序中之前,你需要按照第一百二十页「获取游戏的进程标识符」中的描述找到 PID(proc),以及你想要读写的内存地址(adr)。有了这些值,ReadProcessMemory() 函数把从内存获取的值存储在 val 中。然后,代码递增 val,并通过调用 WriteProcessMemory() 替换原始值。写入发生后,对同一个地址调用 ReadProcessMemory() 以确认新的内存值。注意 val 实际上不是缓冲区。把 &val; 作为 Buffer 参数传递是可行的,因为只要 Size 匹配,它可以是指向任何静态内存结构的指针。