pe檔案結構(四)
參考書:《加密與解密》
一般來說輸出表存在於dll中。輸出表提供了 檔案裡函式的名字跟這些函式的位址, pe裝載器通過輸出表來改動iat。image_export_directory結構:image_optional_header中的 datadirectory[0] 提供了輸出表的rva。輸出表是以乙個image_export_directory結構 開始的。
typedef struct _image_export_directory image_export_directory, *pimage_export_directory;
輸出表主要就是來給pe載入器改動iat的,即查詢函式的入口位址。pe載入器查詢函式的位址有兩種方法,從序號查詢,從函式名查詢。
1. 從序號查詢函式入口位址pe載入器通過int知道了序號。直接用這個序號 去找 函式位址陣列eat就能夠了。例項分析:2. 從函式名查詢函式入口位址
通過函式名,查詢函式名陣列ent,找到這個函式名在陣列中的序號 n(從0數起),然後取輸出序列號陣列的第n個值(從0數起)。
然後 以這個值為序號的的函式位址陣列eat的值就是這個函式的入口位址。
即 ent[ 輸出序列號陣列[n] ]
比如找user32.dll 中adjustwindowrect 這個函式。先檢視user32.dll的二進位制檔案。它的image_optional_header結構為:
從中能夠知道:name: rva 55c0h 檔案偏移值:49c0hbase: 1
numberoffunctions: 02dch
numberofnmae:02dch
addressoffunctions: rva 3928h 檔案偏移值:2d28h
addressofnames: rva 4498h 檔案偏移值:3898h
addressofnameordinals: rva 5008h 檔案偏移值:4408h
檢視ent陣列所指向的字串。能夠知道adjustwindowrect是第2個元素。所以。檢視addressofnameordinals所指向的輸出序列號陣列的第2個元素,能夠發現值為 1。
再檢視eat中序號為1的元素(即第2個元素)值為021140h,這個就是adjustwindowrect函式的rva。PE檔案結構詳解(四)PE匯入表
pe檔案結構詳解 二 可執行檔案頭的最後展示了乙個陣列,pe檔案結構詳解 三 pe匯出表中解釋了其中第一項的格式,本篇文章來揭示這個陣列中的第二項 image directory entry import,即匯入表。也許大家注意到過,在image data directory中,有幾項的名字都和匯入...
PE檔案結構詳解(四)PE匯入表
pe檔案結構詳解 二 可執行檔案頭的最後展示了乙個陣列,pe檔案結構詳解 三 pe匯出表中解釋了其中第一項的格式,本篇文章來揭示這個陣列中的第二項 image directory entry import,即匯入表。也許大家注意到過,在image data directory中,有幾項的名字都和匯入...
PE檔案結構詳解(四)PE匯入表
pe檔案結構詳解 二 可執行檔案頭的最後展示了乙個陣列,pe檔案結構詳解 三 pe匯出表中解釋了其中第一項的格式,本篇文章來揭示這個陣列中的第二項 image directory entry import,即匯入表。也許大家注意到過,在image data directory中,有幾項的名字都和匯入...