我正在尝试将浮点值写入称为Dolphin的视频游戏模拟器中。我有一个特定游戏的内存地址电子表格,我希望能够更改这些地址的值。 Dolphin具有调试设置,我可以即时查看游戏内存,但是每当我尝试运行程序时,内存地址的值就不会更改
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
float newValue = 22;
HWND hWnd = FindWindow(0, "Dolphin 5.0-321");
if(hWnd == 0) {
cerr << "Cannot Find Window." << endl;
} else {
DWORD pId;
GetWindowThreadProcessId(hWnd, &pId);
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId);
if(!hProc) {
cerr << "Cannot Open Process." << endl;
} else {
int isSuccessful = WriteProcessMemory(hProc, (LPVOID)0x81118DF0, &newValue, (DWORD)sizeof(newValue), NULL);
if (isSuccessful) {
clog << "Process Memory Written." << endl;
} else {
cerr << "Cannot Write Process Memory." << endl;
}
CloseHandle(hProc);
}
}
return 0;
}
仿真器中的海豚,如果您使用的是调试功能,它可能没有提供实际的实际内存地址,而是提供了相对于仿真系统而不是Windows操作系统的地址。可以将其视为一台虚拟机,海豚仿真器正在运行客户机操作系统,并且您正在从主机Windows OS写入内存。
如果您通过从主机操作系统反转游戏找到了这些地址,则可以写这些地址而没有太大问题。
无法保证写入变量地址会产生您想要的效果,它可能会被其他一些代码覆盖。
最后,如果您为海豚进程的虚拟内存提供了正确的地址,并且已经使用Cheat Engine之类的工具测试了它的正确更改,则可能出现的最后一个问题是,您没有以如下方式运行C ++项目:管理员。一旦这样做,它应该可以正常工作。