访问外部进程的内存

时间:2013-06-20 22:34:04

标签: c++ c memory process createremotethread

我一直在网站上阅读并谷歌搜索试图找到我试图做的确定答案,但我没有找到一个回答我所有问题。

我有两个过程。一个有一个整数变量,我想通过第二个进程更改。我知道如何读取/写入特定的内存位置,但我只知道如何在本机进程地址上执行此操作。

我不明白createremotethread。有可能我得到一个最干净,最简单的例子来操作一个不是正在运行的程序本机的进程的内存吗?假设两个程序都在运行。

提前致谢

编辑:我从其他来源得到了一些关于我的问题的答案。我只想了解如何写一个可记忆的内存位置,比如说:

WriteProcessMemory的(phandle,(无效*)地址,缬氨酸,的sizeof(VAL),NULL);

假设val是一个bool,这似乎没有效果:

while(true){
    key=getch();
    if(key=='1'){
        if(val)val=false;
        else val=true;
        WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL);
    }
    bool val2;
    ReadProcessMemory(phandle, (void*)address, &val2, sizeof(val2), NULL);
    cout<<val2<<endl;
}

总是显示0.为什么?

2 个答案:

答案 0 :(得分:0)

尝试阅读有关共享内存和互斥的信息,以确保不会有两个进程同时操作相同的内存点。

BOOL WINAPI WriteProcessMemory(
  _In_   HANDLE hProcess,
  _In_   LPVOID lpBaseAddress,
  _In_   LPCVOID lpBuffer,
  _In_   SIZE_T nSize,
  _Out_  SIZE_T *lpNumberOfBytesWritten
);

如果你传递了如上所述的正确参数,你必须至少有前4个参数才能工作

执行以下操作

WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL); 

注意val传递val的地址

答案 1 :(得分:0)

问题解决了,我不得不使用     HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS,0,pid)

而不是     HANDLE phandle = OpenProcess(PROCESS_VM_READ,0,pid)