我想编写一个简单的应用程序,能够从另一个进程(应用程序)的已分配内存中检索某些特定数据.
假设我已经知道一个进程'id并且我想在这个进程中获得一个值'内存总是来自一个固定的偏移量(如0x523F1C),这在用户模式下是可行的,还是必须在内核模式下?
任何提示或信息都非常感谢.
我的环境是Windows XP,我使用Visual C++和Qt进行GUI.
提前致谢 :)
编辑:
(a)谢谢你们.基本上它正在工作(当设置一个断点并挂钩它正确的值),但是当做正常的释放构建时,获得的值总是初始化:(
必须更加努力才能弄明白......
(b)由于我试图获取价值的应用程序不是由我编写的,我还可以进行进程间通信/共享内存技术吗?
编辑2:
再次感谢您的快速反应!:d
使用ReadProcessMemory - 你需要一个具有PROCESS_VM_READ访问权限的句柄来访问另一个进程[1],但是如果你是管理员(或者如果你有SE_DEBUG privs),它应该是直截了当的.
BOOL WINAPI ReadProcessMemory( __in HANDLE hProcess, __in LPCVOID lpBaseAddress, __out LPVOID lpBuffer, __in SIZE_T nSize, __out SIZE_T* lpNumberOfBytesRead );
[1]
HANDLE hProc = OpenProcess(PROCESS_VM_READ, false, pid);
编辑:b)不,除非您使用CreateRemoteThread - 但您通常需要将自己的DLL填充到远程进程中,然后才能在该进程中有意义地创建线程.这是先进的,有趣的和危险的:)