访问外部进程的内存

accessing the memory of a foreign process

本文关键字:内存 进程 外部 访问      更新时间:2023-10-16

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

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

我不理解createremotethread。我是否有可能得到一个最干净、最简单的例子来操纵一个进程的内存,而不是运行程序的本地内存?当然,前提是两个程序都在运行。

thanks in advance

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

WriteProcessMemory (phandle (void *)地址,val, 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。为什么?

尝试读取共享内存,并互斥以确保没有两个进程同时操作同一个内存点

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

的地址

问题解决了,我不得不使用

代替