PE格式詳解(三)

2021-04-19 23:05:38 字數 1247 閱讀 5710

pe header對應c

中的image_nt_header32

結構,如下:

typedef

struct

_image_nt_headers image_nt_headers32,*pimage_nt_headers32;

再是真實pe檔案的截圖:

picture missing

(一)中我們已經得到pe header的起始位址d8h,直到dbh,共4個位元組,就是結構中的signature成員,資料為50h 45h 00h 00h,對應值為00 00 45 50h

(注,以後凡說到值,均指按高位在高位址的原則倒過來後的實際值,不再說明)

,對應winnt.h中的常數image_nt_signature,如果signature等於454ch表示是image_vxd_signature,即win3.x中的virtual device driver;等於454eh表示image_os2_signature,即os2的程式等等,請自行查閱winnt.h。

image_nt_headers32

結構只有三個成員,比較簡單,但是展開後兩個成員的結構體image_file_header, image_optional_header,就會讓人絕倒了。。。我們首先看一下image_file_header結構:

typedef

struct

_image_file_header image_file_header, *pimage_file_header;

結合圖,分析如下:

machine值為014ch,對應image_file_32bit_machine常數,即32位機器,其他值請查閱winnt.h。

接著兩個位元組表示numberofsections區段的個數,值為0007h,也就是我們的testpe.exe有7個區段。

sizeofoptionalheader位於ech,edh,值為00e0h,即後面的optional header結構總長為224位元組。

再看乙個characteristics,表示這個pe檔案的型別,圖中位於eeh和efh,值為0102h,是使用二進位制位來標記的,二進位制為100000010

= image_file_32bit_machine | image_file_executable_image,表示該檔案是32位的exe檔案,如果它的值是2***h,則表示是乙個dll,具體還請查閱winnt.h。

(唉。。。這句話打的好累啊,以後就說自行查閱了)

PE格式詳解(二)

乙個pe程式總是以乙個64位元組的dos header結構開頭,目的就是為了如果程式在dos中執行,dos會識別它為正確的exe並進而執行dosstub,它的作用就是輸出字串 this program cannot run in dos mode.然後退出。下面就是dos header在c語言中的結...

PE格式詳解(五)

上次文章因為實在太長,所以不得不把這麼簡單的一點內容單獨成文。回顧一下,上次先說到 pe header 然後說到其中的成員 optional header 它的最後乙個結構成員 datadirectory 是乙個含有16個 image data directory 型別元素的陣列,每乙個元素都指向p...

PE格式詳解講解1

下面的內容主要是圍繞這個圖來進行 這個頭部是為了相容早期的dos系統,pe檔案的第乙個位元組起始於乙個傳統的ms dos頭,被稱為image dos header,這個結構體完整的定義如下 注 最左邊是檔案頭的偏移量。image dos header struct image dos header ...