PE 檔案格式分析

2021-04-08 12:54:08 字數 2489 閱讀 7675

pe 檔案格式分析

pe檔案是任何可執行模組或者

dll的檔案格式。

pe檔案以

64位元組的

dos檔案頭(

image_dos_header,

)開始,之後是一小段

dos程式(

dos頭的概念是從

16位的

windows

可執行程式(

ne格式)中來的,這個部分主要用在

os/2

可執行程式、自解壓文件及其他應用程式),然後是

248位元組的

nt檔案頭(

image_nt_headers

),nt

檔案頭的偏移位址由

image_dos_header

結構的e_lfanew

給出。pe

檔案通常保留了

16個資料目錄,最常見就是匯入表,匯出表,資源和重定位表。

windows

為dos

檔案標記和

pe檔案標記都定義了巨集標記:

#difine image_dos_signature 0x

5a

4d//mz

(可以用

ultraedit

看到)#difine image_nt_signature0x00004550 // pe00

這兩個巨集,主要用來判斷該檔案是否位

pe檔案。

hmodule hmod = ::getmodulehandle(null);

image_dos_header* pdosheader = (image_dos_header*)hmod;

image_optional_header * poptheader =

(image_optional_header *)((byte*)hmod + pdosheader->e_lfanew + 24);

image_import_descriptor* pimportdesc = (image_import_descriptor*)

((byte*)hmod + poptheader->datadirectory[image_directory_entry_import].virtualaddress);

while

(pimportdesc->firstthunk)

pimportdesc++;

}

pe檔案中的重要結構:

typedef struct _image_dos_header image_dos_header, *pimage_dos_header;

typedef struct _image_nt_headers image_nt_headers32, *pimage_nt_headers32;

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_import_descriptor ;

dwordtimedatestamp;// 0 if not bound,

// -1 if bound, and real date/time stamp

//in image_directory_entry_bound_import (new bind)

// o.w. date/time stamp of dll bound to (old bind)

dwordforwarderchain;

// -1 if no forwarders

dwordname;

dwordfirstthunk;// rva to iat (if bound this iat has actual addresses)

} image_import_descriptor;

注意:1

、pe格式檔案中經常用到rva,即相關虛擬位址,用在不知道基位址的情況下

表示乙個記憶體位址。它需要加上基位址才能得到線性位址(linear address)。 2、

dwordoriginalfirstthunk;

表示函式(

hint/name

)表的偏移量,記錄匯入函式名稱 3、

dwordname;

模組的名稱 4、

dwordfirstthunk;

:iat(

匯入位址表

)的偏移量,記錄匯入函式位址

typedef struct _image_thunk_data32 u1;

} image_thunk_data32;

typedef struct _image_import_by_name image_import_by_name, *pimage_import_by_name;  

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檔案格式

pe檔案格式應用於所有32位windows系統 windows 9x,windows nt,windows 2000及windows xp vista已經對pe格式進行了公升級,也出現了pe64 而在msdn 98中有pe的大量詳細資料 按目錄 msdn library visual studio ...