根據函式名稱匯出函式

2021-08-07 04:30:56 字數 1050 閱讀 3156

根據函式名稱匯出函式

相關的rva

各種rva資料寬度

根據名稱匯出函式的步驟

獲取模組首位址,首位址也是dos頭首位址

根據dos頭中的e_lfanew(rva,因為pe頭對映到記憶體中後和exe檔案中是一樣的,所以這個位址也是file address,即lfa這個字首)定位到nt頭

根據nt頭中是乙個特徵碼兩個結構體

typedef

struct _image_nt_headers image_nt_headers32, *pimage_nt_headers32;

這時需要optionalheader中的內容。optionalheader的最後乙個資料成員是有16個成員的結構體陣列。每乙個結構體都存了乙個rva,每個rva又會指向乙個結構體。就好像這個陣列是一級目錄,每個一級目錄又指向乙個二級目錄,二級目錄又會指向正式內容。

這裡,只需要該結構體陣列的第乙個元素,即export table,匯出表。

匯出表結構體如下:

typedef struct _image_export_directory  image_export_directory, *pimage_export_directory;

這時需要後面3個rva來找到函式位址,先來解釋一下這三個rva

使用addressofnames定位到名稱表,設定迴圈找到需要匯出的函式名

addressofnames和addressofnameordinals是相互對應的,也就是說搜尋的函式名在addressofnames中的位置是第 i 個,那麼該名稱對應的addressofnameordinals中的位置也是第 i 個,即兩個陣列下標是對應相同的。

記下名稱匹配時name下標,例如是第5個

根據記下的下標,找該函式的索引值。也就是定址到addressofnameordinals的第5個元素,然後將該元素(word型)的值記下。

將記下的值作為addressoffunctions陣列的下標,找出該函式的rva

通過rva計算出va就行了

VS巨集 根據函式名稱定位函式

在程式設計時經常只記得函式名稱的部分內容,想快速定位,但c 編輯器的函式列表沒有搜尋功能,用正規表示式搜尋可以解決這個問題,現將此過程寫成乙個巨集。使用方法 開啟vs的巨集編輯器,貼上以下 為此巨集指定乙個快捷鍵 可選 用快捷鍵或直接執行巨集,輸入函式名稱即可。用f3可以搜尋下乙個符合要求的函式。s...

c 建立dll匯出函式名稱

extern c 的作用是宣告以c語言的格式編譯當前 上 兩個函式,分別以c和c 格式編譯,看看效果是什麼 extern c 與 預設c 方式的區別 extern c declspec dllexport void func1 c declspec dllexport void func1 cpp ...

由函式名稱呼叫函式

對dll進行過動態載入的朋友應該清楚getprocaddress這個api,其作用是通過乙個函式名稱從dll模組中獲得這個函式的位址,然後將其轉換成相應的函式指標供我們呼叫。這便是通過函式名稱來呼叫函式的乙個典型例子。下面我們就 一下這個函式,主要思路就是建立一張函式對映表。include usin...