C ++ WriteProcessMemory在32位不起作用

时间:2013-03-25 21:15:26

标签: c++ winapi memory

问题在标题中 我正在使用写进程内存来更改内存中的某些值 我尝试在64位窗口,它的工作完美 但问题是在32位窗口中它没有写出我想要的值 读进程内存在64位窗口和32位窗口中工作,但问题在于写入 请帮帮我(:

编辑: 代码是:

    #include "stdafx.h"
    #include <iostream>
    #include <fstream>
    #include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Loading..."<< endl;
    int address = 0x3458CBC0; 
    int address2 = 0x3458CBC4; 
    int value = 20;
    DWORD pid;
    HWND hwnd = FindWindowA(NULL,"some window");
    GetWindowThreadProcessId(hwnd,&pid);
    HANDLE phandle;
    cout << "Found Proccess ID:" << pid << endl;
    phandle = OpenProcess(0x1F0FFF,0,pid);
    cout << "Loaded Successfully."<< endl ;
    ReadProcessMemory(phandle,(LPVOID)address,&value,4,0);
    cout << "Readed Value:" << value << endl;
    ReadProcessMemory(phandle,(LPVOID)address2,&value,4,0);
    cout << "Readed Value:" << value << endl;
    address = 0x3458CBC0; 
    address2 = 0x3458CBC4; 
    value = 20;
    WriteProcessMemory(phandle,(LPVOID)address,&value,4,0);
    WriteProcessMemory(phandle,(LPVOID)address2,&value,4,0);
    cin.get();
    return 0;
}

解决方案

该应用程序将内存中写入的内容挂钩到内存中 钩子在64位Windows中不起作用,所以我可以写入内存

谢谢大家!

1 个答案:

答案 0 :(得分:2)

在Windows下运行的32位应用程序实际上使用的是特殊的32位仿真包装器(WOW64)。您无法从那里写入64位应用程序的地址空间。

Here's a page that explains it better than I can.

已编辑添加:

如果您在32位Windows上运行32位版本,它应该可以运行。如果没有,请发布您的代码。

已编辑添加:

测试WriteProcessMemory()的返回值。如果它为零(似乎很可能),请致电GetLastError() - 这应该会给你一个线索。