Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问外部进程的内存_C++_C_Memory_Process_Createremotethread - Fatal编程技术网

C++ 访问外部进程的内存

C++ 访问外部进程的内存,c++,c,memory,process,createremotethread,C++,C,Memory,Process,Createremotethread,我一直在浏览网站,用谷歌搜索,试图找到我想要做的事情的最终答案,但我没有找到一个能回答我所有问题的答案 我有两个过程。其中一个有一个整数变量,我想通过第二个过程来更改它。我知道如何读/写特定的内存位置,但我只知道如何在本机进程地址上读/写 我不明白你的意思。我是否有可能得到一个最干净、最简单的例子来操作一个进程的内存,而不是运行程序的本地内存?当然,假设两个程序都在运行 提前谢谢 编辑:关于我的问题,我从其他渠道得到了一些答案。我只是想了解如何将VARABLE写入内存位置,比如: WritePr

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

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

我不明白你的意思。我是否有可能得到一个最干净、最简单的例子来操作一个进程的内存,而不是运行程序的本地内存?当然,假设两个程序都在运行

提前谢谢

编辑:关于我的问题,我从其他渠道得到了一些答案。我只是想了解如何将VARABLE写入内存位置,比如:

WriteProcessMemory(phandle,(void*)地址,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;
}
while(true){
key=getch();
如果(键=='1'){
如果(val)val=false;
else val=true;
WriteProcessMemory(phandle,(void*)地址,&val,sizeof(val),NULL);
}
布尔瓦尔2;
ReadProcessMemory(phandle,(void*)地址,&val2,sizeof(val2),NULL);

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

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的地址问题解决了,我不得不使用 HANDLE phandle=OpenProcess(PROCESS\u ALL\u ACCESS,0,pid)

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

我做了,我剩下的唯一问题是writeprocessmemory的使用。我无法让它工作,writeprocessmemory(phandle,(void*)address,&val,sizeof(val),NULL);int val2;ReadProcessMemory(phandle,(void*)address,&val2,sizeof(val2),NULL);检查返回值,如果为0,则某些参数错误如果
val
是实际的
bool
变量,则需要使用
&val
。但是如果
val
已经是指向
bool
的指针,则不需要
。首先,执行此bool result=ReadProcessMemory,然后输出结果,如果结果是0,那么phandle或address都有问题。如果这样做,它将返回一个正数。从内存中读取它看起来没有问题。当我执行BOOL result=WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL);,它将返回一个0