PE檔案頭入門

2022-05-20 04:37:19 字數 3128 閱讀 4986

首先需要知道dos頭,其其資料結構不太需要知道,但需要知道其中的兩個和偏移

e_magic    word    ;0000h exe標誌,"mz"頭

e_lfanew dword 003ch  "pe"頭的偏移位址

整個資料結構大小為40h

這裡我們隨便找乙個.exe程式為例

找到了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   //

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

pe擴充套件頭後面便是節表

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 結構中的 ...