2

我一直在阅读网站并在谷歌上搜索试图找到我想要做的事情的最终答案,但我没有找到一个能回答我所有问题的答案。

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

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

提前致谢

编辑:我从其他来源得到了一些关于我的问题的答案。我只想了解如何将变量写入内存位置,例如:

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

假设 val 是布尔值,这似乎没有效果:

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。为什么?

4

2 回答 2

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 的地址

于 2013-06-20T22:47:54.633 回答
0

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

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

于 2013-06-21T10:42:02.137 回答