PE檔案結構(四) 輸出表
PE檔案結構(四)
參考
書:《加密與解密》
視訊:小甲魚 解密系列 視訊
輸出表
一般來說輸出表存在於dll中。輸出表提供了 檔案中函式的名字跟這些函式的地址, PE裝載器通過輸出表來修改IAT。
IMAGE_OPTIONAL_HEADER中的 DataDirectory[0] 提供了輸出表的RVA。輸出表是以一個IMAGE_EXPORT_DIRECTORY結構 開始的。
IMAGE_EXPORT_DIRECTORY結構:
typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics; //未使用
DWORD TimeDateStamp; //檔案生成的時間
WORD MajorVersion; //主版本號,一般為0
WORD MinorVersion; //次版本號,一般為0
DWORD Name; //指向dll名的RVA
DWORD Base; // 基數,一般為 1 (就是從1數起)
DWORD NumberOfFunctions; // AddressOfFunctions指向的陣列的元素的個數
DWORD NumberOfNames; // AddressOfNames 指向的陣列的元素的個數
DWORD AddressOfFunctions; // 函式地址陣列ENT的RVA
DWORD AddressOfNames; // 函式名字陣列EAT的RVA
DWORD AddressOfNameOrdinals; // 輸出序列號陣列的RVA,這個陣列是以WORD為單位的,用來函式名字陣列連線函式地址陣列的
} 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結構為:
圖片1
從中可以知道:
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。
圖片2
再檢視EAT中序號為1的元素(即第2個元素)值為021140h,這個就是AdjustWindowRect函式的RVA。
圖片3
相關文章
- PE 檔案結構圖
- PE檔案結構複習
- PE檔案結構解析3
- PE檔案結構解析1
- PE檔案結構解析2
- PE檔案結構(五)基址重定位
- 再探.NET的PE檔案結構(安全篇)
- PE檔案結構(二) 區塊,檔案偏移與RVA轉換
- PE結構體中匯出表/匯入表解析——初階結構體
- PE檔案格式
- PE結構分析(二)
- 排序,檔案輸入輸出排序
- 檔案操作-輸入輸出
- 深入剖析PE檔案
- 表`t`的INODE結構檔案分析
- 如何輸出結構體結構體
- C輸入輸出與檔案
- 手工構造一個超微型的 PE 檔案 (轉)
- java_檔案輸入與輸出Java
- PE教程2: 檢驗PE檔案的有效性
- 類檔案結構_class類檔案的的結構
- 表`t`的XDES Entry結構檔案分析
- PE檔案格式的RVA概念
- MySQL輸出html格式檔案MySqlHTML
- Django靜態檔案輸出Django
- Webpack原理-輸出檔案分析Web
- python:檔案的輸入與輸出Python
- 羽夏殼世界—— PE 結構(上)
- Mysql如何讀.frm結尾的表結構定義檔案MySql
- Keras輸出網路結構圖Keras
- C++中的檔案輸入/輸出(2):讀取檔案 (轉)C++
- BMP檔案結構
- 【Mysql】Mysql從frm檔案裡恢復表結構MySql
- 通過替換frm檔案方式修改表結構
- PE檔案格式詳細解析(一)
- 初步瞭解PE檔案格式(上)
- win32 PE 檔案格式 (轉)Win32
- windows載入PE檔案的流程Windows