PE檔案詳解之IMAGE NT HEADER結構

2021-07-14 16:01:29 字數 2060 閱讀 7807

pe header 是pe相關結構nt映像頭(image_nt_header)的簡稱。裡面包含了許多pe裝載器用到的重要字段。

先看看該結構體:

[cpp]

view plain

copy

typedef

struct

_image_nt_headers  image_nt_headers, *pimage_nt_headers;  

第乙個引數是乙個標誌。在乙個有效的pe檔案裡,

signature

欄位被設定為

00004550h

, asci|| 字元碼是:

pe00

。標誌著pe檔案的開頭。

看看下面的這個例子,使用ue檢視的16進製制**:

第二個引數是:image_file_header。如下圖:

說完了這個 image_file_header 結構,那麼接下來就是第三個引數optionalheader。

先看看這個結構體的定義吧。

[cpp]

view plain

copy

typedef

struct

_image_optional_header  

image_optional_header32, *pimage_optional_header32;  

這是個可選映像頭,是乙個可選的結構體。裡面定義了很多pe檔案的屬性。

然而  這個結構體的大部分欄位不重要的,雖然這麼多。重點掌握上面的注釋以 「//---!!!!!!*****」的字段。

下面是各字段的解釋:

addressofentrypoint 字段

指出檔案被執行時的入口位址,這是乙個rva位址。若在乙個可執行檔案上附加了一段**並想讓這段**首先被執行,呢麼只需要將這個入口位址指向附加的**就行了。

imagebase 字段:

之初檔案的有點先裝入位址,也就是當檔案被執行時,若可能,windows有限將檔案裝入到imagebase 字段指向的位址中,只有指定的位址已經被其他的模組使用時,檔案才被裝入到其他位址中,鏈結器產生可執行檔案的時候對應 這個 位址來生成機器碼。當檔案被裝入這個位址時不需要進行重定位操作,裝入速度最快,若檔案被裝載到其他的位址,將不得不進行重定位操作。

在鏈結的時候,可以自定義優先裝載位址,如果不指定這個選項話,一般地exe檔案的預設裝載位址是00400 0000h,而dll檔案的預設優先裝土位址被定位1000 0000h。

sectionalignment 和 filealignment欄位

sectionalignment欄位指定了位元組被裝入記憶體 後的對齊的單位,每個位元組被裝入的位址必定是本子段指定的數值的整數倍。而filealignment欄位指定了儲存在磁碟檔案中的對齊的單位。通常來講x86cpu的記憶體對齊頁面大小是4kb。

subsystem 字段

指定使用介面的子系統。這個字段決定了系統如何為程式建立初始化的介面,連線時的/subsystem:*** 選項指定的就是這個欄位的值。

datadirectory 字段

資料目錄表。這個欄位是乙個指標,它由16個相同的 image_data_directory,結構組成。雖然pe檔案中的資料是按照裝入記憶體後的頁屬性歸類而被放在不同的位元組中,但是這些處於各個位元組中的資料按照用途可以被分為匯出表,匯入表,資源,重定位表等資料塊,這個16個image_data_directory 結構就是用來定義多種不同的資料塊。它的定義很簡單,僅僅指出了某種資料塊的位置和長度:

[cpp]

view plain

copy

typedef

struct

_image_data_directory  image_data_directory, *pimage_data_directory;  

在pe檔案中尋找特定的資料時,就是從這些image_data_directory 結構開始的。

PE檔案詳解之PE檔案頭

1,pe檔案頭 pe header 緊挨著 dos stub 2,pe header 是pe相關結構nt映像頭 image nt header 的簡稱。裡面包含著許多pe裝載器用到的重要字段。3,執行體在支援pe檔案結構的作業系統中執行時,pe裝載器將從 image dos header 結構中的 ...

PE檔案詳解之PE檔案頭

1,pe檔案頭 pe header 緊挨著 dos stub 2,pe header 是pe相關結構nt映像頭 image nt header 的簡稱。裡面包含著許多pe裝載器用到的重要字段。3,執行體在支援pe檔案結構的作業系統中執行時,pe裝載器將從 image dos header 結構中的 ...

PE檔案詳解之IMAGE NT HEADER結構

pe header 是pe相關結構nt映像頭 image nt header 的簡稱。裡面包含了許多pe裝載器用到的重要字段。先看看該結構體 cpp view plain copy typedef struct image nt headers image nt headers,pimage nt ...