windows 獲取DLL中的輸出函式位址

2021-10-17 14:37:24 字數 1804 閱讀 2136

getprocaddress()函式檢索指定的動態鏈結庫(dll)中的輸出庫函式位址。

例項:

#include #include typedef void (*myproc)(lptstr);

int main()

函式原型:

farproc getprocaddress(

hmodule   hmodule,    // dll模組控制代碼

lpcstr       lpprocname   // 函式名

);引數:

hmodule

[in] 包含此函式的dll模組的控制代碼。loadlibrary或者getmodulehandle函式可以返回此控制代碼。

lpprocname

[in] 包含函式名的以null結尾的字串,或者指定函式的序數值。如果此引數是乙個序數值,它必須在乙個字的底位元組,高位元組必須為0。

返回值:

如果函式呼叫成功,返回值是dll中的輸出函式位址。

如果函式呼叫失敗,返回值是null。得到進一步的錯誤資訊,呼叫函式getlasterror。

注釋:getprocaddress()函式被用來檢索在dll中的輸出函式位址。 

lpprocname指標指向的函式名,拼寫和大小寫必須和dll源**中的模組定義檔案(.def)中輸出段(exports)中指定的相同。

win32 api函式的輸出名可能不同於你在**中呼叫的這些函式名,這個不同被巨集隱含在相關的sdk標頭檔案中。如果想得到更多資訊,請參考win32函式原型(win32 function prototypes)。

lpprocname引數能夠識別dll中的函式,通過指定乙個與函式相聯絡的序數值(在.def中的exports段)。getprocaddress函式驗證那個指定的序數值是否在輸出的序數1和最高序數值之間(在.def中)。函式用這個序數值作為索引從函式表中讀函式位址,假如.def 檔案不連續地定義函式的序數值,如從1到n(n是輸出的函式序數值),錯誤將會發生,getprocaddress將會返回乙個錯誤的、非空的位址,雖然指定的序數沒有對應的函式。

為了防止函式不存在,函式應該通過名字指定而不是序數值。

要求:windows nt/2000: 要求windows nt 3.1 或以後版本。

windows 95/98: 要求windows 95 或以後版本。

標頭檔案: 在winbase.h中宣告,include windows.h。

庫檔案: use kernel32.lib。

參看:動態鏈結庫縱覽(dynamic-link libraries overview), 動態鏈結庫函式(dynamic-link library functions),freelibrary, getmodulehandle, loadlibrary

示例**:

呼叫kernel32.dll中的registerserviceprocess(僅在windows98中適用)

hmodule hmodule=getmodulehandle("kernel32.dll");

if (hmodule)

}slr(address space layout randomization)使可執行程式的裝載位址有乙個隨機偏移。雖然偏移值不大,但是會給核心級除錯帶來麻煩,尤其是離線查詢符號表時。

經典的方法是用登錄檔項hklm\system\currentcontrolset\session manager\memory management.的方法禁用,但在win7下,這種方法已經out了。

根據 所述,在win7下,要用官方指定工具(the enhanced mitigation experience toolkit)禁用:

Linux c程式中獲取shelll指令碼輸出

table of contents 1.前言 2.使用臨時檔案 3.使用匿名管道 4.使用popen 5.小結 unix界有一句名言 一行shell指令碼勝過萬行c程式 雖然這句話有些誇張,但不可否認的是,借助指令碼確實能夠極大的簡化一些程式設計工作。比 如實現乙個ping程式來測試網路的連通性,實...

windows下DLL庫里如何獲取動態庫檔名稱

windows給我們提供了另乙個api可以獲取到這個dll庫的hmodule,即 getmodulehandleex。該函式原型如下 winbaseapi bool winapi getmodulehandleexa in dword dwflags,in opt lpcstr lpmodulena...

獲取DLL中的函式入口位址

定義返回值為int型的包含兩個int型引數的函式指標型別paddtest typedef int paddtest int,int paddtest func 定義paddtest型別的變數func 獲取dll檔案的模組控制代碼 hmodule hm loadlibrary staticlib db...