写入内存进行处理

时间:2017-04-21 03:54:51

标签: c++ emulation

我试图将浮动值写入名为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;
}

1 个答案:

答案 0 :(得分:0)

仿真器中的海豚,如果使用它的调试功能,它可能没有提供实际的实际内存地址,而是提供了相对于仿真系统而不是Windows操作系统的地址。可以将其视为虚拟机,海豚仿真器正在运行客户机操作系统,并且您正在从主机Windows操作系统写入内存。

如果您通过从主机操作系统反转游戏找到了这些地址,那么您可以写这些地址而没有太大问题。

不能保证写入变量地址会产生您想要的效果,它可能会被其他一些代码覆盖。

最后,如果您为海豚进程的虚拟内存提供了正确的地址,并且已经使用Cheat Engine之类的工具测试了它的正确更改,则可能出现的最后一个问题是您没有运行C ++项目作为管理员。一旦这样做,它应该可以正常工作。