我想编写一个简单的应用程序,能够从另一个进程(应用程序)的已分配内存中检索某些特定数据。
假设我已经知道一个进程'id并且我想在这个进程中获取一个值'内存总是从一个固定的偏移量(如0x523F1C),这在用户模式下是否可行,或者它必须在内核中-mode? p>
任何提示或信息都受到高度赞赏。
我的环境是Windows XP,我使用Visual C ++和Qt进行GUI。
提前致谢:)
编辑:
(a)谢谢你们。基本上它正在工作(当设置一个断点并挂钩它正确的值时),但在进行正常发布时,获得的值总是初始化:(
必须更加努力才能弄明白......
(b)由于我试图从中获取值的应用程序不是由我编写的,我还可以进行进程间通信/共享内存技术吗?
编辑2:
再次感谢您的快速反应! :d
答案 0 :(得分:5)
使用ReadProcessMemory - 你需要一个具有PROCESS_VM_READ访问权限的句柄来访问另一个进程[1],但是如果你是管理员(或者如果你有SE_DEBUG权限),它应该是直截了当的。
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填充到远程进程中,然后才能在该进程中有意义地创建线程。这是先进的,有趣的和危险的:)
答案 1 :(得分:1)
如果你正在进行进程间通信/共享内存,我建议使用Boost::Interprocess,因为它会让生活更轻松。
答案 2 :(得分:0)
有一个ReadProcessMemory()功能,但你必须自己找到使用它的要求。我认为你可能需要将自己设置为该过程的调试器。