PE 檔案格式結構解析with PE-bear

更新 發佈閱讀 8 分鐘

PE(Portable Executable)格式是 Windows 系統中用於執行檔(.exe)、動態連結庫(.dll)及系統驅動(.sys)的標準檔案格式。它的結構設計是為了讓作業系統的載入器(Loader)能有效地將檔案映射到記憶體中執行。

以下是 PE 檔案的主要結構組成:


1. MS-DOS 標頭(MS-DOS Header)

每個 PE 檔案都以一個 64 位元組的 DOS MZ 標頭 開始。這是為了相容性而設計的。

  • 關鍵欄位: e_magic 必須是 MZ(0x5A4D)。
  • 關鍵欄位: e_lfanew 位在標頭末尾,指向 PE 標頭 的起始偏移位置。

2. DOS 存根(DOS Stub)

這是一段微小的程式,當檔案在純 DOS 環境下執行時,會顯示「This program cannot be run in DOS mode」並退出。

3. PE 標頭 (NT Headers)

這是 PE 檔案的核心,包含三個部分:

  • Signature:4 位元組,值為 PE\0\0 (0x50450000)。
  • 影像檔案標頭 (File Header):包含檔案的基本實體屬性,例如:
    • Machine:目標架構(如 x64, i386)。
    • NumberOfSections:區段(Sections)的數量。
    • TimeDateStamp:檔案建立的時間戳。
  • 選擇性標頭 (Optional Header):雖然叫「選擇性」,但對於執行檔來說是必備的。它定義了檔案在記憶體中的佈局:
    • AddressOfEntryPoint:程式執行的起點(OEP)。
    • ImageBase:建議的記憶體載入地址。
    • SectionAlignment:區段在記憶體中的對齊單位(通常是 4KB)。
    • DataDirectory:包含匯入表(Import Table)、匯出表(Export Table)、資源表等重要結構的索引。

4. 區段表 (Section Table / Section Headers)

這是一個陣列,描述了緊跟在其後的各個 區段(Sections)。每個表項包含:

  • Name:區段名稱(如 .text, .data)。
  • VirtualSize / VirtualAddress:載入到記憶體後的長度與地址。
  • SizeOfRawData / PointerToRawData:在硬碟檔案中的長度與地址。
  • Characteristics:權限設定(唯讀、可讀寫、可執行)。

5. 區段數據 (Sections)

這是檔案的實際內容,常見的區段包括:

  • .text:存放可執行的機器碼(程式邏輯)。
  • .data:存放已初始化的全域變數和靜態變數。
  • .rdata:存放唯讀數據(如常數、字串字面量)。
  • .idata匯入表,列出程式運行所需的 DLL 及其函數。
  • .edata匯出表,列出此檔案提供的函數(常見於 DLL)。
  • .rsrc:資源文件,如圖標、選單、位圖。
  • .reloc:重定位資訊,用於當檔案無法載入到首選 ImageBase 時進行地址修正。

如果你想親自觀察這些結構,推薦使用以下工具:

  • PE-bear 介面非常直覺,適合視覺化查看各個標頭的內容。
vocus|新世代的創作平台


vocus|新世代的創作平台

總結結構視圖

結構層次 說明

DOS Header 識別標記 MZ 與 PE 標頭偏移量

PE Header (NT) 包含 CPU 架構、入口點、記憶體佈局參數

Section Table 各區段的屬性清單(地圖)

Sections (.text) 程式碼區

Sections (.data) 數據區

Sections (...) 匯入/匯出、資源、重定位等

理解 PE 格式對於逆向工程、惡意軟體分析、驅動開發以及底層系統優化至關重要。

既然對 PE 格式的結構有了初步概念,我們進一步深入看它在實務開發或分析中最重要的兩個核心:記憶體對齊(Alignment)與數據目錄(Data Directory)

這兩個概念決定了程式如何從硬碟上的「死檔案」變成記憶體中「活的進程」。


6. 檔案與記憶體的映射 (Alignment)

PE 格式中有兩個非常重要的「對齊」參數,這常讓初學者感到困惑:

  • File Alignment(檔案對齊): 在硬碟上,為了磁碟讀取效率,區段通常以 512 位元組(一個磁區)為單位對齊。
  • Section Alignment(記憶體對齊): 當載入到記憶體後,為了配合 CPU 的分頁機制,通常以 4KB (4096 bytes) 為單位對齊。

這意味著同一個區段,在記憶體中的地址與在硬碟中的地址通常是不一樣的,這就是為什麼我們需要計算 RVA(相對虛擬地址)


7. 數據目錄 (Data Directory):功能的核心

Optional Header 的末尾有一個陣列,稱為 DataDirectory。它就像是檔案的「功能清單」,包含了 16 個槽位,指向檔案中最重要的結構:

  • Export Table (匯出表): 告訴系統這個檔案提供了哪些函數供別人使用(DLL 必備)。
  • Import Table (匯出表): 記錄了程式啟動時需要從哪些 DLL 載入哪些函數。
  • Resource Table (資源表): 存放圖標、對話框字串、甚至嵌入的檔案。
  • Base Relocation Table (重定位表): 如果作業系統無法將檔案載入到預期的 ImageBase 地址,就會根據這張表修正程式碼中的硬編碼地址。

8. 如何在程式中存取這些結構?

如果你正在開發一個工具(例如分析器或注入器),在 C/C++ 中你可以直接使用 winnt.h 定義的結構體:

C++
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)buffer;
if (pDosHeader->e_magic == IMAGE_DOS_SIGNATURE) {
// 透過 e_lfanew 找到 NT Headers
PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)((BYTE*)buffer + pDosHeader->e_lfanew);

if (pNtHeaders->Signature == IMAGE_NT_SIGNATURE) {
// 取得機器架構 (x64/x86)
WORD machine = pNtHeaders->FileHeader.Machine;
// 取得進入點地址
DWORD entryPoint = pNtHeaders->OptionalHeader.AddressOfEntryPoint;
}
}
留言
avatar-img
sirius數字沙龍
23會員
521內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
sirius數字沙龍的其他內容
2026/05/12
UEFITool 是一款用於解析、修改和檢視 UEFI BIOS 韌體鏡像文件(如 .bin, .rom, .cap)的強大工具,常用於修改 BIOS 支援 NVMe 啟動、添加 CPU 微代碼 (Microcode) 或解鎖隱藏功能。操作核心流程為:開啟檔案 -> 搜尋/定位模組 -> 替換/插入
Thumbnail
2026/05/12
UEFITool 是一款用於解析、修改和檢視 UEFI BIOS 韌體鏡像文件(如 .bin, .rom, .cap)的強大工具,常用於修改 BIOS 支援 NVMe 啟動、添加 CPU 微代碼 (Microcode) 或解鎖隱藏功能。操作核心流程為:開啟檔案 -> 搜尋/定位模組 -> 替換/插入
Thumbnail
2026/05/11
電腦病毒感染系統並實現常駐是一個精密的過程,通常涉及對作業系統結構的深度入侵。在 Windows 11 這種具備高度安全防護(如 Secure Boot 和 ELAM)的系統中,病毒的行為模式通常如下: 1. 初始感染:寄生於可執行程式 (Infection) 病毒首先需要一個載體。當一個受感
Thumbnail
2026/05/11
電腦病毒感染系統並實現常駐是一個精密的過程,通常涉及對作業系統結構的深度入侵。在 Windows 11 這種具備高度安全防護(如 Secure Boot 和 ELAM)的系統中,病毒的行為模式通常如下: 1. 初始感染:寄生於可執行程式 (Infection) 病毒首先需要一個載體。當一個受感
Thumbnail
2026/05/11
這是一個非常深入的技術問題。首先需要澄清一個關鍵概念:Secure Boot(安全啟動)本身並不是一個「檔案」或「程式」而被載入硬碟,它是一套存在於主機板 UEFI 韌體(Firmware) 內的驗證機制與資料庫。 雖然它不以「程式碼」形式存在於硬碟,但它運作時極度依賴硬碟上的特定資訊與簽章。以下
Thumbnail
2026/05/11
這是一個非常深入的技術問題。首先需要澄清一個關鍵概念:Secure Boot(安全啟動)本身並不是一個「檔案」或「程式」而被載入硬碟,它是一套存在於主機板 UEFI 韌體(Firmware) 內的驗證機制與資料庫。 雖然它不以「程式碼」形式存在於硬碟,但它運作時極度依賴硬碟上的特定資訊與簽章。以下
Thumbnail
看更多
你可能也想看
Thumbnail
(本篇接續組織文化與領導風格,探討企業內部第三大影響因素——管理制度與流程,如何左右人力資源的選、用、育、留。) 每間企業都有一套「行事規範」和「作業流程」,從招募、面試、入職到績效考核、離職,都由這些制度與流程串聯起來。
Thumbnail
(本篇接續組織文化與領導風格,探討企業內部第三大影響因素——管理制度與流程,如何左右人力資源的選、用、育、留。) 每間企業都有一套「行事規範」和「作業流程」,從招募、面試、入職到績效考核、離職,都由這些制度與流程串聯起來。
Thumbnail
在過去的職場文化裡,「管理」常常被理解為「控制」。主管要求部屬每天回報進度、每週繳交週報、每月寫月報,甚至在某些企業裡還存在所謂的「日報制度」,每一個細節都必須向上呈報。這樣的管理方式在過去或許有其時代背景,因為資訊不透明、工作流程不易追蹤,主管必須透過大量報告來掌握情況。然而在今天,當人工智慧與數
Thumbnail
在過去的職場文化裡,「管理」常常被理解為「控制」。主管要求部屬每天回報進度、每週繳交週報、每月寫月報,甚至在某些企業裡還存在所謂的「日報制度」,每一個細節都必須向上呈報。這樣的管理方式在過去或許有其時代背景,因為資訊不透明、工作流程不易追蹤,主管必須透過大量報告來掌握情況。然而在今天,當人工智慧與數
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
在職場上專業能力是基本盤,「說得好」比「做得多」更能決定你的能見度。
Thumbnail
在職場上專業能力是基本盤,「說得好」比「做得多」更能決定你的能見度。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
本篇紀錄了一位 PM 如何在資源受限下,運用 AI 工具協助打造電商「新客推薦引擎」的實戰過程。包含:問題重構:如何透過 AI 協助 Brainstorming,與 AI 協作低程式碼實作:讓 AI 產出 Python 程式碼進行推薦權重計算,最後是驗證與迭代的重要性。
Thumbnail
本篇紀錄了一位 PM 如何在資源受限下,運用 AI 工具協助打造電商「新客推薦引擎」的實戰過程。包含:問題重構:如何透過 AI 協助 Brainstorming,與 AI 協作低程式碼實作:讓 AI 產出 Python 程式碼進行推薦權重計算,最後是驗證與迭代的重要性。
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
「那我們該怎麼辦?」小許疑惑地問。李天明微笑著,彷彿已經想到了解決方案,「我們需要進行分工學習和專業輔導。讓機器人學習的知識和技能偏向某一方面,而不是全方位發展。這樣,我們就可以讓每台機器人在特定的應用場合發揮他們的專長。」小許點了點頭,「這樣的話,我們就能更好地控制機器人的應用
Thumbnail
「那我們該怎麼辦?」小許疑惑地問。李天明微笑著,彷彿已經想到了解決方案,「我們需要進行分工學習和專業輔導。讓機器人學習的知識和技能偏向某一方面,而不是全方位發展。這樣,我們就可以讓每台機器人在特定的應用場合發揮他們的專長。」小許點了點頭,「這樣的話,我們就能更好地控制機器人的應用
Thumbnail
近年來Business Intelligence、Dashboard或戰情室在市場上的需求越來越高,身為在金融業資訊產業工作者,幾年前也做過其他BI產品的Project。 當然金融業BI Project內容不會只有數據視覺化,包含的Workflow和ETL部分又是另一個故事了。 這次透過
Thumbnail
近年來Business Intelligence、Dashboard或戰情室在市場上的需求越來越高,身為在金融業資訊產業工作者,幾年前也做過其他BI產品的Project。 當然金融業BI Project內容不會只有數據視覺化,包含的Workflow和ETL部分又是另一個故事了。 這次透過
Thumbnail
🌿「四個角色 ╳三段愛慾糾葛 ╳ 一次陽性檢驗」 💞狂粉隱藏版八折優惠碼來囉~(  ̄▽ ̄)σ,輸入解鎖折扣碼:Language 來賓介紹👏👏👏 -- 演員謝雲陞(飾Oscar) -- 演員卓崇傑(飾Daniel) 「我們有愛,但愛沒那麼萬能。 」
Thumbnail
🌿「四個角色 ╳三段愛慾糾葛 ╳ 一次陽性檢驗」 💞狂粉隱藏版八折優惠碼來囉~(  ̄▽ ̄)σ,輸入解鎖折扣碼:Language 來賓介紹👏👏👏 -- 演員謝雲陞(飾Oscar) -- 演員卓崇傑(飾Daniel) 「我們有愛,但愛沒那麼萬能。 」
Thumbnail
在辭職後全職創業的這一年中,我反思了自己在公司中擔任 CTO 角色的表現。透過聆聽 Amy 的「數據女孩的中年危機」及其對產品經理角色的深刻見解,我意識到我在決策和資源管理上的不足。這篇文章分享了我如何從“底層”轉向“中層”的過程,以及未來我在時間管理和規劃上的目標,希望能給讀者帶來啟發和新觀點。
Thumbnail
在辭職後全職創業的這一年中,我反思了自己在公司中擔任 CTO 角色的表現。透過聆聽 Amy 的「數據女孩的中年危機」及其對產品經理角色的深刻見解,我意識到我在決策和資源管理上的不足。這篇文章分享了我如何從“底層”轉向“中層”的過程,以及未來我在時間管理和規劃上的目標,希望能給讀者帶來啟發和新觀點。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News