在程序A中,执行简单的死循环printf变量值,
通过单步调试,
确定变量a的地址,比如是0x1234
(不知到为什么,这个地址每次运行的时候都一样,顺便给我科普一下这个知识,我也很感谢!)void main()
{
int a=1;
while(1)
{
printf("a: %d\n",a);
}
}
在程序B 中,用WriteProcessMemory()函数,修改0x1234内存中的数值为9.
前面做了提升权限等操作,中间GetLastErro()没有获取到错误,
WriteProcessMemory()的返回值也不是0(成功了),但不知道为啥,程序A的输出不能改变。GetWindowThreadProcessId(hw,&pid);
DWORD d = ::GetLastError(); //提升权限
enableDebugPriv();
hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);// 打开进程 PROCESS_ALL_ACCESS 可读写
d = ::GetLastError(); int test = WriteProcessMemory(hProcess,(LPVOID)addr,&val,4,0); // 向另一进程内存中写数据
d = ::GetLastError();向各位请教原因!谢谢!
通过单步调试,
确定变量a的地址,比如是0x1234
(不知到为什么,这个地址每次运行的时候都一样,顺便给我科普一下这个知识,我也很感谢!)void main()
{
int a=1;
while(1)
{
printf("a: %d\n",a);
}
}
在程序B 中,用WriteProcessMemory()函数,修改0x1234内存中的数值为9.
前面做了提升权限等操作,中间GetLastErro()没有获取到错误,
WriteProcessMemory()的返回值也不是0(成功了),但不知道为啥,程序A的输出不能改变。GetWindowThreadProcessId(hw,&pid);
DWORD d = ::GetLastError(); //提升权限
enableDebugPriv();
hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);// 打开进程 PROCESS_ALL_ACCESS 可读写
d = ::GetLastError(); int test = WriteProcessMemory(hProcess,(LPVOID)addr,&val,4,0); // 向另一进程内存中写数据
d = ::GetLastError();向各位请教原因!谢谢!
但是,如果要是直接运行DEBUG 文件夹里生成的 EXE运行进程,就可以改。原理不明中。。