PE檔案 匯入表,匯出表

2022-05-07 10:55:06 字數 1409 閱讀 5427

typedef struct _image_import_descriptor ;

dword timedatestamp;

dword forwarderchain;

dword name; //庫名稱字串位址

dword firstthunk; //iat的位址

typedef struct _image_data_directory  image_data_directory,*pimage_data_directory;
用來說明iat的image_ import_ descriptor 結構體以陣列形式存在,且擁有多個成員。這樣是因為pe檔案可以同時匯入多個庫。

從庫中獲得函式位址的api為getprocaddress()函式。該api引用eat來獲取指定api的位址。通過getprocaddress() 獲取的函式位址的函式擁有函式名稱.

對於沒有函式名稱的匯出函式,可以通過ordinal 查詢到它們的位址。從ordinal值中減去image export_ directory.base 成員後得到乙個值,使用該值作為「函式位址陣列」的索引,即可查詢到相應函式的位址。

getprocaddress()原理:

(1)利用addressofnames成員轉到「函式名稱陣列」。

(2)「函式名稱陣列」中儲存著字串位址。通過比較( strcmp)字串,查詢指

定的函式名稱(此時陣列的索引稱為name_index)。

(3)利用addressofnameordinals成員,轉到orinal陣列。

(4)在ordinal 陣列中通過name_ index 查詢相應ordinal 值。

(5)利用addressoffunctions成員轉到「 函式位址陣列」( eat )。

(6)在「函式位址陣列」中將剛剛求得的ordinal用作陣列索引,獲得指定函式的起

始位址。

PE檔案(2)匯出表

匯出表就是記載著動態鏈結庫的一些匯出資訊。通過匯出表,dll 檔案可以向系統提供匯出函式的名稱 序號和入口位址等資訊,windows 載入器通過這些資訊來完成動態連線的整個過程。擴充套件名為.exe 的pe 檔案中一般不存在匯出表,而大部分的.dll 檔案中都包含匯出表。但這並不是絕對的。例如純粹用...

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

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

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

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