2009-01-07 94 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,因爲它會使生活變得更容易。