从固定内存偏移量获取值:Visual C ++编程

时间:2009-01-07 12:35:00

标签: c++ visual-c++

我想编写一个简单的应用程序,能够从另一个进程(应用程序)的已分配内存中检索某些特定数据。

假设我已经知道一个进程'id并且我想在这个进程中获取一个值'内存总是从一个固定的偏移量(如0x523F1C),这在用户模式下是否可行,或者它必须在内核中-mode?

任何提示或信息都受到高度赞赏。

我的环境是Windows XP,我使用Visual C ++和Qt进行GUI。

提前致谢:)

编辑:

(a)谢谢你们。基本上它正在工作(当设置一个断点并挂钩它正确的值时),但在进行正常发布时,获得的值总是初始化:(

必须更加努力才能弄明白......

(b)由于我试图从中获取值的应用程序不是由我编写的,我还可以进行进程间通信/共享内存技术吗?

编辑2:

再次感谢您的快速反应! :d

3 个答案:

答案 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()功能,但你必须自己找到使用它的要求。我认为你可能需要将自己设置为该过程的调试器。