如何獲得當前執行模組在程序位址空間的位置

2021-06-21 01:52:40 字數 1087 閱讀 1951

(w)winmain的hinstanceexe引數實際值是乙個記憶體基位址;系統將可執行檔案的映像載入到程序位址空間中的這個位置。例如,系統開啟可執行檔案,並將它載入到位址0x00400000,則(w)winmain的hinstanceexe引數值為0x00400000.

為了知道乙個可執行檔案或dll檔案被載入到程序位址空間的什麼位置,可以使用getmodulehandle函式來返回乙個控制代碼/基位址

[cpp]view plain

copy

print?

hmodule getmodulehandle(pctstr pszmodule)
呼叫這個函式是,要傳遞乙個以0為終止字元的字串,它指定了已在主調程序的位址空間中載入的乙個可執行檔案或dll檔案的名稱。如果系統找到了可執行檔案或dll檔名稱,getmodulehandle就會返回可執行檔案/dll檔案映像載入到基位址。如果沒有找到檔案,系統將返回null。

getmodulehandle的另乙個用法是為pszmodule引數傳入null,這樣就可以返回主調程序模組的基位址。如果我們的**在乙個dll中,那麼可利用兩種方法來了解**正在什麼模組中執行。第乙個辦法是利用鏈結器提供的偽變數__imagebase,它指向當前正在執行的模組的基位址。這是c語言執行庫啟動**在呼叫我們的(w)winmain函式時所做的事情。

第二種方法是呼叫getmoudlehandleex,將get_module_handle_ex_flag_from_address作為它的第乙個引數,將當前函式的位址作為第二個引數。最後乙個引數是乙個指向hmodule的指標,getmodulehandleex會用傳入函式(即第二個引數)所在dll的基位址來填寫該指標。以下**對這幾種方法進行演示。

[cpp]view plain

copy

print?

extern "c" const image_dos_header __imagebase;

void dumpmodule()

int _tmain(int argc, _tchar* argv)

如何獲得當前執行模組在程序位址空間的位置

w winmain的hinstanceexe引數實際值是乙個記憶體基位址 系統將可執行檔案的映像載入到程序位址空間中的這個位置。例如,系統開啟可執行檔案,並將它載入到位址0x00400000,則 w winmain的hinstanceexe引數值為0x00400000.為了知道乙個可執行檔案或dll...

如何獲得當前執行模組在程序位址空間的位置

w winmain的hinstanceexe引數實際值是乙個記憶體基位址 系統將可執行檔案的映像載入到程序位址空間中的這個位置。例如,系統開啟可執行檔案,並將它載入到位址0x00400000,則 w winmain的hinstanceexe引數值為0x00400000.為了知道乙個可執行檔案或dll...

定位獲得當前位址

定位大概步奏 1.通過gps獲ip位址獲得當前移動裝置的經緯度。主要 public void registerlocationlistener private class mylocationlistener implements locationlistener else else 移除基於loc...