正在写内存以进行处理

问题描述 投票:0回答:1

我正在尝试将浮点值写入称为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;
}
c++ emulation
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.