由函式名稱呼叫函式

2021-09-30 08:05:31 字數 701 閱讀 9569

對dll進行過動態載入的朋友應該清楚getprocaddress這個api,其作用是通過乙個函式名稱從dll模組中獲得這個函式的位址,然後將其轉換成相應的函式指標供我們呼叫。

這便是通過函式名稱來呼叫函式的乙個典型例子。下面我們就**一下這個函式,主要思路就是建立一張函式對映表。

#include

using namespace std;

// 定義函式入口結構

typedef void (*fun_ptr)(void);

struct fun_entry;

// 定義了兩個原型不同的函式

void foo1()

int foo2(int i)

// 定義函式對映表

fun_entry fun_entry_table = ,};

// 模擬getprocaddress

fun_ptr get_proc_address(const char* fun_name)

return null;}

int main()

是不是很簡單,可getprocaddress究竟是怎麼實現的呢?這個我目前還不太清楚,不過我們知道dll中有函式符號資訊,可以方便的定位乙個函式的入口位址。要是普通的程式的二進位制**中也有函式名稱,那且不是很爽!但這樣就暴露了程式的內部實現,這可大大方便了黑客,:)。

(freefalcon於2004.09.18)

PHP被函式中取得呼叫函式名稱

php debug backtrace 函式生成乙個 backtrace。該函式返回乙個關聯陣列。下面是可能返回的元素 名稱型別 描述function 字串當前的函式名。line 整數當前的行號。file 字串當前的檔名。class 字串當前的類名 object 物件當前物件。type 字串當前的呼...

根據函式名稱匯出函式

根據函式名稱匯出函式 相關的rva 各種rva資料寬度 根據名稱匯出函式的步驟 獲取模組首位址,首位址也是dos頭首位址 根據dos頭中的e lfanew rva,因為pe頭對映到記憶體中後和exe檔案中是一樣的,所以這個位址也是file address,即lfa這個字首 定位到nt頭 根據nt頭中...

函式呼叫約定與函式名稱修飾規則 VC

inte2000 163.com 使用c c 語言開發軟體的程式設計師經常碰到這樣的問題 有時候是程式編譯沒有問題,但是鏈結的時候總是報告函式不存在 經典的lnk 2001錯誤 有時候是程式編譯和鏈結都沒有錯誤,但是只要呼叫庫中的函式就會出現堆疊異常。這些現象通常是出現在c和c 的 混合使用的情況下...