PE檔案結構(四) 輸出表

2021-09-08 17:35:05 字數 1728 閱讀 3898

pe檔案結構(四)

參考書:《加密與解密》

一般來說輸出表存在於dll中。輸出表提供了 檔案裡函式的名字跟這些函式的位址, pe裝載器通過輸出表來改動iat。

image_optional_header中的 datadirectory[0] 提供了輸出表的rva。輸出表是以乙個image_export_directory結構 開始的。

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          檔案偏移值:49c0h  

base: 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中,有幾項的名字都和匯入...