2010-08-12 69 views
4

我有一個正在使用'Test.dll'的正在運行的進程。我想知道內存中Test.dll啓動的確切位置,但似乎無法完成。在C++中查找加載的DLL的內存地址

我的主要問題是我需要從這個DLL寫入偏移量,但是當我使用Read/WriteProcessMemory時,我無法準確輸入Test.dll +一些偏移量。

任何幫助將不勝感激。

回答

5

好的,所以一種方法是使用GetModuleHandle()返回的值。是的,它會返回HANDLE,但您可以將其轉換爲適當的指針類型。與Visual Studio的「模塊」窗口中的模塊地址範圍進行比較,您會看到它與該範圍的起始值相同。

更好的方法是使用GetModuleInformation()。您傳遞的MODULEINFO結構的第一個字段將包含DLL的基地址。

根據MODULEINFO的文檔雖然:

一個模塊的加載地址是一樣的HMODULE值。

所以我想只是使用HMODULE和鑄造是好的。無論你想做什麼,我想。

如果要獲取遠程進程的信息,請使用EnumProcessModules()

+0

查看GetModuleHandle,它會查找當前正在運行的進程中的模塊。如果我想在另一個過程中尋找它,該怎麼辦? GetModuleInformation確實有一個HANDLE輸入,但它也請求模塊句柄,這正是我試圖獲得的。 – Dororo 2010-08-12 22:53:45

+0

使用EnumProcessModules()。請參閱編輯。 – 2010-08-12 23:01:32

+0

使用EnumProcessModules得到它;你是明星,謝謝。 – Dororo 2010-08-12 23:40:15