PE檔案格式詳解,第一講,DOS頭檔案格式

2022-03-20 20:36:20 字數 2608 閱讀 5669

今天講解pe檔案格式的dos頭檔案格式

首先我們要理解,什麼是檔案格式,我們常說的exe可執行程式,就是乙個檔案格式,那麼我們要了解它裡面到底存了什麼內容

簡短的說明.

我們要知道,pe檔案格式,是微軟半公開的,因為微軟並沒有說明這個檔案格式.但是微軟有定義的結構體.

檔案格式,是記錄檔案載入到記憶體中執行的位置,和偏移

在dos16位年代下,主要記錄分段等等的資訊.

在32位年代下,主要記錄分割槽位置,**位置,各種表等等..

我們看下結構體.

typedef struct _image_dos_header  image_dos_header, *pimage_dos_header;
可以看出,這個結構體中已經明確定義了各種dos(16位年代的)頭了.

我們在32位年代下,主要要知道第乙個成員和最後乙個成員

第乙個成員: 標誌mz,記錄了mz,佔兩個位元組,這個是dos系統作者的名字

最後乙個成員: 這個成員主要記錄了新的檔案開始執行的位址位置.

因為微軟為了相容16位程式,所以還保留dos頭,但是32位程式,是不會執行dos頭了,重要的就是這兩個成員.

第乙個成員,對應4d 5a兩個位元組

最後乙個成員,對應 00 00 00 d0 (小尾方式) 最後乙個成員是儲存了新的檔案格式位址.所以我們看到d0的位置,正好是pe

那麼我們如果不是在16位程式下使用,那麼上面除了最後乙個成員,其餘的位置都可以隨便改.

正常執行

我們上面看到了,dos頭就乙個結構體大小,到了最後乙個成員位置,則是這個結構體結束,那麼在這個結構體結束的後面,一直到pe的位置的二進位制到底是什麼?

可以看出,在dos頭的位置,也就是成員 word e_lfarlc; 記錄的是dos的**執行位置,這塊區域屬於dos的**執行區域

主要作用是,在16位系統下,不能執行32位程式,如果執行,則利用中斷,顯示 this is program cannot be run in dos mode (這個程式不能執行在dos系統)

如果在32位系統下使用,那麼這一段是沒有任何作用的.dos頭只需要知道 第乙個成員,和最後乙個成員你的指向即可.

如果是16位系統下,那麼你這個dos頭記錄的資訊就有用了(儲存了頁大小,頁的個數,ss段.ip執行位置,校驗和等等)

到了pe位置,那麼我們要了解一下nt頭,pe頭,可選頭的結構到底是什麼.新的格式是怎麼樣子的.

typedef struct _image_nt_headers  image_nt_headers32, *pimage_nt_headers32;
nt頭分為32和64位版本的,這裡說下32的,

第乙個成員: 4個位元組,也就是和4d 5a 一樣,都是固定的標誌,而這個標誌則是

也就是我們說的pe頭.

下面還有兩個結構體,分別是檔案頭,還有可選頭.

typedef struct _image_file_header  image_file_header, *pimage_file_header;

可選頭:

typedef struct _image_optional_header image_optional_header32, *pimage_optional_header32;

最後乙個成員是資料目錄

typedef struct _image_data_directory  image_data_directory, *pimage_data_directory;

typedef struct _image_section_header  misc;

dword virtualaddress;

dword sizeofrawdata;

dword pointertorawdata;

dword pointertorelocations;

dword pointertolinenumbers;

word numberofrelocations;

word numberoflinenumbers;

dword characteristics;

} image_section_header, *pimage_section_header;

可以看出,乙個pe檔案,主要是結構體套結構體,裡面的每個成員都代表什麼意義,結構體就怎麼多.

dos頭

nt標頭檔案頭

可選頭資料目錄 

節頭今天主要是要了解pe的dos頭,以及pe結構的分布圖.具體作用以後慢慢講,主要了解大體框架,隨著框架深入.

如果想一次了解全部pe,請參考網上大神的部落格. 

PE檔案格式一覽

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

動態規劃詳解(第一講)

第一講內容來自 演算法問題實戰策略 韓 具宗萬著 典型示例 應用動態規劃最有名的示例是二項式係數 binomial coefficient 的計算,二項式係數 nr dbinom rn 表示在n個互不相等的元素中無順序的挑選出r個元素的方法的總數。二項式係數具有如下遞迴式 nr n 1r 1 n 1...

PE教程1 PE檔案格式一覽

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