2009-01-07 93 views
0

我想写一个简单的应用程序,能够从另一个进程(应用程序)的分配内存中检索某些特定的数据。从固定内存偏移量中获取值:Visual C++编程

说我已经知道一个进程的ID,我想在这个进程的内存中总是从一个固定的偏移量(如0x523F1C)获得一个值,这是可以在用户模式下执行的,还是必须在内核模式?

任何提示或信息,高度赞赏。

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

感谢提前:)

编辑:

(一)谢谢你们。基本上它正在工作(当设置一个断点并钩住它的值是正确的),但是当执行正常版本构建时,获得的值始终是初始化的:(

将不得不更多地弄清楚......

(二)由于我试图获得不被我写的应用价值,我还可以做的进程间通信/共享内存技术

编辑2:

再次感谢快速反应!:D

回答

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)否,除非你使用远程线程 - 但你通常需要有匀自己的DLL到远程过程中,你可以有意识建立在线程之前处理。这是先进的,有趣和危险:)

0

有一个ReadProcessMemory()函数,但你必须找到自己使用它的要求。我想你可能需要将自己设置为该进程的调试器。

1

如果你正在进行进程间通信/共享内存,我会建议使用Boost::Interprocess,因为它会使生活变得更容易。