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

pur*_*rga 0 c++ visual-c++

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

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

任何提示或信息都非常感谢.

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

提前致谢 :)

编辑:

(a)谢谢你们.基本上它正在工作(当设置一个断点并挂钩它正确的值),但是当做正常的释放构建时,获得的值总是初始化:(

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

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

编辑2:

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

Jam*_*den 5

使用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
);
Run Code Online (Sandbox Code Playgroud)

[1]

HANDLE hProc = OpenProcess(PROCESS_VM_READ, false, pid);
Run Code Online (Sandbox Code Playgroud)

编辑:b)不,除非您使用CreateRemoteThread - 但您通常需要将自己的DLL填充到远程进程中,然后才能在该进程中有意义地创建线程.这是先进的,有趣的和危险的:)