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 ...