首先需要知道dos頭,其其資料結構不太需要知道,但需要知道其中的兩個和偏移
e_magic word ;0000h exe標誌,"mz"頭這裡我們隨便找乙個.exe程式為例e_lfanew dword 003ch "pe"頭的偏移位址
整個資料結構大小為40h
找到了e_flanew後就可以去找pe頭,其頭有乙個標識,且佔4位元組,其值也是"pe"的ascii,以兩個0結尾"pe\0\0"
pe標誌後面接著就是image_file_header(pe標準頭),其結構大小為14h,加上標記,就是18h
image_file_header也就是一下部分machine word 004h
sizeofsection word 006h pe中節的數量
timedatestamp dword 008h 檔案建立日期
pointertosymboltable dword 00ch 指向符號表的指標
numberofsymbols dword 010h 符號表中符號個數
sizeofoptionalheader word 014h 擴充套件pe頭的長度
characteristics word 016h 檔案屬性
跟在其後面的是pe擴充套件頭
pe擴充套件頭大小不一定,但可以通過pe標準頭的成員sizeofoptionheader來獲取pe擴充套件頭的大小
typedef struct _image_optional_header image_optional_header32, *pimage_optional_header32;
在擴充套件頭里,最後乙個成員為資料目錄項
其結構為
typedef struct其成員為_image_data_directory image_data_directory, *pimage_data_directory;
#define image_directory_entry_export 0 //pe擴充套件頭後面便是節表export directory
#define image_directory_entry_import 1 //
import directory
#define image_directory_entry_resource 2 //
resource directory
#define image_directory_entry_exception 3 //
exception directory
#define image_directory_entry_security 4 //
security directory
#define image_directory_entry_basereloc 5 //
base relocation table
#define image_directory_entry_debug 6 //
debug directory
////
(x86 usage)
#define image_directory_entry_architecture 7 //
architecture specific data
#define image_directory_entry_globalptr 8 //
rva of gp
#define image_directory_entry_tls 9 //
tls directory
#define image_directory_entry_load_config 10 //
load configuration directory
#define image_directory_entry_bound_import 11 //
bound import directory in headers
#define image_directory_entry_iat 12 //
import address table
#define image_directory_entry_delay_import 13 //
delay load import descriptors
#define image_directory_entry_com_descriptor 14 //
com runtime descriptor
typedef struct_image_section_header misc;
dword virtualaddress;
/*虛擬位址 節區的rva位址(偏移)
*/dword sizeofrawdata;
/*在檔案中對齊的尺寸
*/dword pointertorawdata;
/*在檔案中的偏移
*/dword pointertorelocations;
/*在obj檔案中使用
*/dword pointertolinenumbers;
/*行號表位置,除錯使用
*/word numberofrelocations;
/*在obj檔案中使用
*/word numberoflinenumbers;
/*行號表的數量
*/dword characteristics;
/*節的屬性
*/} image_section_header, *pimage_section_header;
PE檔案頭結構
typedef struct image file header image file header,pimage file header 1.machine 每個cpu都有唯一的machine碼,用來指定檔案的執行平台 define image file machine unknown 0 def...
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 結構中的 ...