我一直在网站上阅读并谷歌搜索试图找到我试图做的确定答案,但我没有找到一个回答我所有问题。
我有两个过程。一个有一个整数变量,我想通过第二个进程更改。我知道如何读取/写入特定的内存位置,但我只知道如何在本机进程地址上执行此操作。我不明白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.为什么?
答案 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)