PE檔案(2)匯出表

2021-08-15 23:45:01 字數 1231 閱讀 4448

匯出表就是記載著動態鏈結庫的一些匯出資訊。

通過匯出表,dll 檔案可以向系統提供匯出函式的名稱、序號和入口位址等資訊,windows 載入器通過這些資訊來完成動態連線的整個過程。

擴充套件名為.exe 的pe 檔案中一般不存在匯出表,而大部分的.dll 檔案中都包含匯出表。但這並不是絕對的。例如純粹用作資源的.dll 檔案就不需要匯出函式啦,另外有些特殊功能的.exe 檔案也會存在匯出函式

當pe檔案被載入為模組的時候,windows載入器會將匯入表中登記的dll檔案一併裝入,再根據dll檔案中的函式匯出資訊對被執行檔案的iat表進行修正。

windows 在載入乙個程序後就會在記憶體中為該程序開闢乙個單獨的4g虛擬位址空間(x86下)。有一些函式很多程式都會用到,為每乙個程式所呼叫的相同的函式都占用一次記憶體空間顯得很浪費,因此windows提出了了動態鏈結庫的概念,將一些常用的函式封裝成動態鏈結庫,等到需要的時候通過直接載入動態鏈結庫,將需要的函式對映到自己的位址空間中,從而提高了記憶體的利用率。

匯出表的定位總體上和匯入表相似:

1.匯出表的模組基位址的計算,與匯入表相似,都是從peb結構中得到的imagebaseaddress成員。

與匯入表不同的是,匯入表是在exe模組中,而匯出表是在dll模組中。

2.獲得匯出表的偏移是通過在nt頭的擴充套件頭的資料目錄表的第image_directory_entry_export(1)項成員的virtualaddress成員中。

只要將匯入表中的image_numberof_entry_import換為image_directory_entry_export就可以了。

匯出表的結構主要是兩張表:函式名稱位址表,入口位址表

typedef

struct _image_export_directory image_export_directory, *pimage_export_directory

PE檔案 匯入表,匯出表

typedef struct image import descriptor dword timedatestamp dword forwarderchain dword name 庫名稱字串位址 dword firstthunk iat的位址 typedef struct image data d...

PE檔案結構詳解(三)PE匯出表

上篇文章 pe檔案結構詳解 二 可執行檔案頭 的結尾出現了乙個大陣列,這個陣列中的每一項都是乙個特定的結構,通過函式獲取陣列中的項可以用rtlimagedirectoryentrytodata函式,datadirectory中的每一項都可以用這個函式獲取,函式原型如下 base 模組基位址。dire...

PE檔案結構詳解(三)PE匯出表

上篇文章 pe檔案結構詳解 二 可執行檔案頭 的結尾出現了乙個大陣列,這個陣列中的每一項都是乙個特定的結構,通過函式獲取陣列中的項可以用rtlimagedirectoryentrytodata函式,datadirectory中的每一項都可以用這個函式獲取,函式原型如下 base 模組基位址。dire...