我试图将浮动值写入名为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;
}
答案 0 :(得分:0)
仿真器中的海豚,如果使用它的调试功能,它可能没有提供实际的实际内存地址,而是提供了相对于仿真系统而不是Windows操作系统的地址。可以将其视为虚拟机,海豚仿真器正在运行客户机操作系统,并且您正在从主机Windows操作系统写入内存。
如果您通过从主机操作系统反转游戏找到了这些地址,那么您可以写这些地址而没有太大问题。
不能保证写入变量地址会产生您想要的效果,它可能会被其他一些代码覆盖。
最后,如果您为海豚进程的虚拟内存提供了正确的地址,并且已经使用Cheat Engine之类的工具测试了它的正确更改,则可能出现的最后一个问题是您没有运行C ++项目作为管理员。一旦这样做,它应该可以正常工作。