PE檔案裝載流程

PE檔案裝載流程,PE格式:Portable Executable File Format(可移植的執行體)是在windows 9x、NT、2000下,所有的執行檔都是基於Microsoft設計的一種新的檔案格式。以下給出PE檔案裝載流程的簡述。

PE檔案裝載流程
PE檔案框架構成:
DOS MZ header
DOS stub
PE header
Section table
Section 1
Section 2
Section ...
Section n
上表是PE檔案結構的總體層次分布。所有 PE檔案(甚至32位的 DLLs) 必須以一個簡單的 DOS MZ header 開始,在偏移0處有DOS下執行檔的“MZ標誌”,有了它,一旦程式在DOS下執行,DOS就能識別出這是有效的執行體,然後運行緊隨 MZ header 之後的 DOS stub。DOS stub實際上是個有效的EXE,在不支持 PE檔案格式的作業系統中,它將簡單顯示一個錯誤提示,類似於字元串 " This program cannot run in DOS mode " 或者程式設計師可根據自己的意圖實現完整的 DOS代碼。通常DOS stub由彙編器/編譯器自動生成,對我們的用處不是很大,它簡單調用中斷21h服務9來顯示字元串"This program cannot run in DOS mode"。
緊接著 DOS stub 的是 PE header。 PE header 是PE相關結構 IMAGE_NT_HEADERS 的簡稱,其中包含了許多PE裝載器用到的重要域。執行檔在支持PE檔案結構的作業系統中執行時,PE裝載器將從 DOS MZ header的偏移3CH處找到 PE header 的起始偏移量。因而跳過了 DOS stub 直接定位到真正的檔案頭 PE header。
PE檔案的真正內容劃分成塊,稱之為sections(節)。每節是一塊擁有共同屬性的數據,比如“.text”節等,那么,每一節的內容都是什麼呢?實際上PE格式的檔案把具有相同屬性的內容放入同一個節中,而不必關心類似“.text”、“.data”的命名,其命名只是為了便於識別,所以,我們如果對PE格式的檔案進行修改,理論上講可以寫入任何一個節內,並調整此節的屬性就可以了。
PE header 接下來的數組結構 section table(節表)。 每個結構包含對應節的屬性、檔案偏移量、虛擬偏移量等。如果PE檔案里有5個節,那么此結構數組內就有5個成員。
以上就是PE檔案格式的物理分布,下面將總結一下裝載一PE檔案的主要步驟:
1、PE檔案被執行,PE裝載器為檔案在記憶體分配一個空的位置。創建進程和主執行緒
2、PE裝載器檢查 DOS MZ header 里的 PE header 偏移量。如果找到,則跳轉到 PE header。
3、PE裝載器檢查 PE header 的有效性。如果有效,就跳轉到PE header的尾部。
4、緊跟 PE header 的是節表。PE裝載器讀取其中的節信息,並採用檔案映射方法將這些節映射到記憶體,同時付上節表里指定的節屬性。
5、PE檔案映射入記憶體後,PE裝載器將處理PE檔案中類似 import table(引入表)邏輯部分。

相關詞條

熱門詞條

聯絡我們