pe檔案格式應用於所有32位windows系統:windows 9x, windows nt,windows 2000及windows xp(vista已經對pe格式進行了公升級,也出現了pe64),而在msdn 98中有pe的大量詳細資料(按目錄:msdn library visual studio 6.0 | specification | platforms | microsoft portable executable and common object file format specification)。
pe檔案內容被分割為不同的區段(section),每一區段中可能包含**或資料。各區段按頁邊界對齊,區段沒有大小限制,是乙個連續結構。每乙個區段在記憶體中都有它自己的一套屬性,比如:這個區段是否包含**、是否唯讀或可讀/寫等。每乙個區段都有不同的名字,這個名字用來表示區段的功能。例如:
.text 是在編譯或彙編結束時產生的一種塊,它的內容全是指令**;
.rdata 是執行期唯讀資料;
.data 是初始化的資料塊;
.idata 包含其它外來dll的函式及資料資訊,即匯入表;
.rsrc 包含模組的全部資源,如圖示、選單、位圖、對話方塊等。
note:使用區段名只是方便人們使用,而對作業系統來說是無關緊要的,因此可將上面區段名任意更改而不會影響pe檔案執行。
pe檔案非常好的乙個特性是其在磁碟上的資料結構與在記憶體中的結構是一致的。在x86系統中,每個記憶體頁大小為4kb(即0x1000位元組)。所以,在x86系統中,pe檔案區段(section)的記憶體對齊值一般是0x1000,在記憶體中的每個區段的起始位址為0x1000的倍數。而磁碟pe檔案對齊值一般為0x200(即512位元組,扇區塊大小),所以pe檔案中每個區段的起始位址為0x200的倍數。在磁碟pe檔案中,區段間的間隙用0x00來填充。由於pe檔案在磁碟和在記憶體中的對齊值不同,所以往往所占用的空間也不相同(在記憶體中往往占用更多空間)。磁碟上的pe檔案和載入進記憶體中的pe檔案比較圖如下:
vc編譯器預設編譯時,exe檔案基位址(imagebase)是0x00400000,dll檔案基位址是0x10000000,可以在鏈結時使用/base引數來改變基址。
我們可以利用一些現成的工具來直觀地檢視pe檔案內容和結構,加深對pe檔案格式的理解。這樣的工具有:lordpe、peditor、stud_pe等。
PE檔案格式
pe 的意思是 portable executable 可移植的執行體 它是 win32環境自身所帶的執行檔案格式。它的一些特性繼承自unix的coff common object file format 檔案格式。portable executable 可移植的執行體 意味著此檔案格式是跨win3...
PE檔案格式
pe檔案格式分析及修改 圖 1 2009 01 09 14 08 pe 的意思是 portable executable 可移植的執行體 它是 win32環境自身所帶的執行檔案格式。它的一些特性繼承自unix的coff common object file format 檔案格式。portable ...
PE檔案格式
0x00 概述 pe檔案格式把可執行檔案分成若干個資料節 section 不同的資源被存放在不同的節中。乙個典型的pe檔案中包含的節如下 text 由編譯器產生,存放二進位制的機器 也是我們反彙編和除錯的物件 data 初始化的資料塊,如巨集定義 全域性變數 靜態變數等 idata 可執行檔案所使用...