PE導出表--查找入口地址

從序號查找入口地址

 

(1)定位到PE文件頭。

(2)從PE文件頭中的IMAGE_OPTIONAL_HEADER32結構中取出數據目錄表,並從第一個數據目錄中得到導出表的地址。

(3)從導出表的nBase字段得到起始序號。

(4)將需要查找的導出序號減去起始序號,就得到了函數在入口地址表中的索引。

(5)檢測索引值是否大於導出表的NumberOfFunctions字段的值,如果大於後者的話,說明輸入的序號是無效的。

(6)用這個索引值在AddressOfFunctions字段指向的導出函數入口地址表中取出相應的項目,這就是函數的入口地址RVA值,當函數被裝入內存的時候,這個RVA值加上模塊實際裝入的基址,就得到了函數真正的入口地址。

 

 

從函數名稱查找入口地址

 

(1)最初的步驟是一樣的,那就是首先得到導出表的地址。

(2)從導出表的NumberOfNames字段得到已命名函數的總數,並以這個數字作爲循環的次數來構造一個循環。

(3)從AddressOfNames字段指向的函數名稱地址表的第一項開始,在循環中將每一項定義的函數名與要查找的函數名相比較,如果沒有任何一個函數名是符合的,表示文件中沒有指定名稱的函數。

(4)如果某一項定義的函數名與要查找的函數名符合,那麼記下這個函數名在字符串地址表中的索引值,然後在AddressOfNameOrdinals 指向的數組中以同樣的索引值取出數組項的值,暫且假定這個值爲x。

(5)最後,以x值作爲索引值,在AddressOfFunctions 字段指向的函數入口地址表中獲取的RVA就是函數的入口地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章