WriteProcessMemory()返回487?使用CheatEngine找到的值

时间:2015-01-26 11:25:26

标签: c++ memory memory-address writing

正如那里写的那样(^),我遇到了C ++和WriteProcessMemory()的问题。我打开了Windows-Calc.exe,存储了一个号码并打开了CheatEngine。我找到了这个号码(改为e.t.c.)并把它放在这个程序中: (注意:我是德国人;" Rechner"等于"计算器")

#include <iostream>
#include <Windows.h>
using namespace std;

int main (){
    int Value = 500;
    HWND hWnd = FindWindow(0, L"Rechner");

    if (!hWnd) {
        cerr << "Can't find window" << endl;
        return 0;
        }

    DWORD PID;
    GetWindowThreadProcessId(hWnd, &PID);
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

    if (!hProcess) {
        cerr << "Process handle error" << endl;
        return 0;
        }
    int iSuccess = WriteProcessMemory(hProcess, (LPVOID)0x899FC6F60C , &Value, (DWORD)sizeof(Value), NULL);
    int i = 0;
    while (iSuccess == 0){
        i = i+1;
        cerr << "Failed " << i  << "  Error:   " << GetLastError() << endl;
        iSuccess = WriteProcessMemory(hProcess, (LPVOID)0x899FC6F60C , &Value, (DWORD)sizeof(Value), NULL);  //Here all begins
        }
    clog << "Done" << endl;
    CloseHandle(hProcess);
    return 0;
}

发现了窗口,找到了进程(没有错误......)然后,&#34; //这里全部开始&#34; line返回0,并将GetLastError()设置为487.就像以下所有内容一样。 如果你知道,我做错了什么,请把它描述为noob-friendly,我昨天开始使用C ++。

1 个答案:

答案 0 :(得分:1)

有关GetLastError代码含义的说明,请参阅此link

在这种情况下ERROR_INVALID_ADDRESS,尝试访问无效地址。

这是因为您正在写入“随机”内存地址。你不能只拿一个号码,希望在这个地址的另一个过程中有记忆。