1. 程式人生 > >00 PE檔案結構

00 PE檔案結構

一、什麼是PE檔案結構?
可執行檔案指的是由作業系統進行載入執行的檔案,而PE檔案結構就是Windows下可執行檔案的格式,同樣ELF(Executable and Linking Format)檔案結構就是linux下可執行檔案的格式;PE是 Potable Executable的首字母縮寫,從其名字直譯的話會以為它是一個跨平臺的可執行體格式,其實它只是在Windows系列的任何平臺上執行,那什麼人應該學習PE檔案結構呢?我覺得任何人都應該學習一下PE檔案結構,每天用著Windows電腦辦公,難道我們就沒有對這些可執行檔案排版感興趣過嗎?
二、如何識別PE檔案?
當我們看到一隻貓的時候,我們之所以認出它是一隻貓,是因為貓有其自由特特徵。同樣要識別PE檔案,我們也需要知道PE檔案有哪些特徵。首先我們可以通過後綴名如.exe .dll .sys等來初步識別,注意這裡只是初步識別,因為字尾名並不能證明檔案是PE檔案。既然後綴名並不能證明檔案是PE檔案,那麼什麼才能證明檔案是PE檔案呢?答案是PE指紋。那什麼是PE指紋?
要了解這個,一種笨辦法當然是開啟多個可執行程式體檢視其二進位制,總結歸納它的特點咯;但我們人都是懶的也是聰明的,所以我們更好的方式就是檢視PE檔案格式規範。在VS幫助裡搜尋PE format就能找到它的相關資訊。從文件中我們知道,要看一個檔案是否是PE檔案,首先我們看檔案頭部兩個位元組是不是十六進位制的4D 5A(即MZ據說是),然後跳到檔案3C處檢視3C處的值,再根據這個值從檔案頭便宜這個值得地方驗證是否有兩位元組為50 45 (即PE),這就是所謂的PE指紋。如下圖,我們用二進位制文字檢視器開啟一個.exe檔案來說明:
在這裡插入圖片描述


下面來看一張PE結構整體結構圖:
在這裡插入圖片描述
DOS部分主要是為了相容,當Windows程式在DOS下執行的時候給出一個提示;
PE檔案頭部分主要給Windows用的;
塊表或節表:類似一個說明書,定義了節或塊中存放什麼資料,從哪開始存等資訊;
節或塊:這裡就是存的實際資料了。
當然後面還有除錯資訊,釋出版一般就不包括了。