PE教程1 PE檔案格式一覽

2021-04-16 02:26:57 字數 2479 閱讀 3397

pe教程1:   pe檔案格式一覽  

考慮到早期寫的pe教程1是自己所有教程中最糟糕的一篇,此番決心徹底重寫一篇以饗讀者。  

pe   的意思就是   portable   executable(可移植的執行體)。它是   win32環境自身所帶的執行體檔案格式。它的一些特性繼承自   unix的   coff   (common   object   file   format)檔案格式。"portable   executable"(可移植的執行體)意味著此檔案格式是跨win32平台的   :   即使windows執行在非intel的cpu上,任何win32平台的pe裝載器都能識別和使用該檔案格式。當然,移植到不同的cpu上pe執行體必然得有一些改變。所有   win32執行體   (除了vxd和16位的dll)都使用pe檔案格式,包括nt的核心模式驅動

程式(kernel   mode   drivers)。因而研究pe檔案格式給了我們洞悉windows結構的良機。  

本教程就讓我們瀏覽一下   pe檔案格式的概要。  

dos   mz   header    

dos   stub    

pe   header    

section   table    

section   1    

section   2    

section   ...    

section   n    

上圖是   pe檔案結構的總體層次分布。所有   pe檔案(甚至32位的   dlls)   必須以乙個簡單的   dos   mz   header   開始。我們通常對此結構沒有太大興趣。有了它,一旦程式在dos下執行,dos就能識別出這是有效的執行體,然後執行緊隨   mz   header   之後的   dos   stub。dos   stub實際上是個有效的   exe,在不

支援 服務

9來顯示字串"this   program   cannot   run   in   dos   mode"。  

緊接著   dos   stub   的是   pe   header。   pe   header   是pe相關結構   image_nt_headers   的簡稱,其中包含了許多pe裝載器用到的重要域。當我們更加深入研究pe檔案格式後,將對這些重要域耳目能詳。執行體在支援pe檔案結構的作業系統中執行時,pe裝載器將從   dos   mz   header   中找到   pe   header   的起始偏移量。因而跳過了   dos   stub   直接定位到真正的檔案頭   pe   header。  

pe檔案的真正內容劃分成塊,稱之為sections(節)。每節是一塊擁有共同屬性的資料,比如**/資料、讀/寫等。我們可以把pe檔案想象成一邏輯磁碟,pe   header   是磁碟的boot扇區,而sections就是各種檔案,每種檔案自然就有不同屬性如唯讀、系統、隱藏、文件等等。   值得我們注意的是   ----   節的劃分是基於各組資料的共同屬性:   而不是邏輯概念。重要的不是資料/**是如何使用的,如果pe檔案中的資料/**擁有相同屬性,它們就能被歸入同一節中。不必關心節中類似於"data",   "code"或其他的邏輯概念:   如果資料和**擁有相同屬性,它們就可以被歸入同乙個節中。(譯者注:節名稱僅僅是個區別不同節的符號而已,類似"data",   "code"的命名只為了便於識別,惟有節的屬性設定決定了節的特性和功能)如果某塊資料想付為唯讀屬性,就可以將該塊資料放入置為唯讀的節中,當pe裝載器對映節內容時,它會檢查相關節屬性並置對應記憶體塊為指定屬性。  

如果我們將pe檔案格式視為一邏輯磁碟,pe   header是boot扇區而sections是各種檔案,但我們仍缺乏足夠

資訊來定位磁碟上的不同檔案,譬如,什麼是pe檔案格式中等價於目錄的東東?別急,那就是   pe   header   接下來的陣列結構   section   table(節表)。   每個結構包含對應節的屬性、檔案偏移量、虛擬偏移量等。如果pe檔案裡有5個節,那麼此結構陣列內就有5個成員。因此,我們便可以把節表視為邏輯磁碟中的根目錄,每個陣列成員等價於根目錄中目錄項。  

以上就是pe檔案格式的物理分布,下面將總結一下裝載一pe檔案的主要步驟:  

當pe檔案被執行,pe裝載器檢查   dos   mz   header   裡的   pe   header   偏移量。如果找到,則跳轉到   pe   header。    

pe裝載器檢查   pe   header   的有效性。如果有效,就跳轉到pe   header的尾部。    

緊跟   pe   header   的是節表。pe裝載器讀取其中的節資訊,並採用檔案對映方法將這些節對映到記憶體,同時付上節表裡指定的節屬性。    

pe檔案對映入記憶體後,pe裝載器將處理pe檔案中類似   import   table(引入表)邏輯部分。    

上述步驟是基於本人觀察後的簡述,顯然還有一些不夠精確的地方,但基本明晰了執行體被處理的過程。  

本文**

PE教程1 PE檔案格式一覽

pe 教程1 pe 檔案格式一覽 考慮到早期寫的 pe教程 1是自己所有教程中最糟糕的一篇,此番決心徹底重寫一篇以饗讀者。pe 的意思就是 portable executable 可移植的執行體 它是 win32 環境自身所帶的執行體檔案格式。它的一些特性繼承自 unix 的 coff common...

PE檔案格式一覽

考慮到早期寫的 pe教程 1是自己所有教程中最糟糕的一篇,此番決心徹底重寫一篇以饗讀者。pe 的意思就是 portable executable 可移植的執行體 它是 win32 環境自身所帶的執行體檔案格式。它的一些特性繼承自 unix 的 coff common object file form...

PE檔案格式

pe 的意思是 portable executable 可移植的執行體 它是 win32環境自身所帶的執行檔案格式。它的一些特性繼承自unix的coff common object file format 檔案格式。portable executable 可移植的執行體 意味著此檔案格式是跨win3...