PE檔案頭結構

2021-07-22 18:37:30 字數 4233 閱讀 8494

typedef

struct _image_file_header image_file_header, *pimage_file_header;

1.machine 每個cpu都有唯一的machine碼,用來指定檔案的執行平台

#define image_file_machine_unknown           0  

#define image_file_machine_i386 0x014c // intel 386.

#define image_file_machine_r3000 0x0162 // mips little-endian, 0x160 big-endian

#define image_file_machine_r4000 0x0166 // mips little-endian

#define image_file_machine_r10000 0x0168 // mips little-endian

#define image_file_machine_wcemipsv2 0x0169 // mips little-endian wce v2

#define image_file_machine_alpha 0x0184 // alpha_axp

#define image_file_machine_sh3 0x01a2 // sh3 little-endian

#define image_file_machine_sh3dsp 0x01a3

#define image_file_machine_sh3e 0x01a4 // sh3e little-endian

#define image_file_machine_sh4 0x01a6 // sh4 little-endian

#define image_file_machine_sh5 0x01a8 // sh5

#define image_file_machine_arm 0x01c0 // arm little-endian

#define image_file_machine_thumb 0x01c2

#define image_file_machine_am33 0x01d3

#define image_file_machine_powerpc 0x01f0 // ibm powerpc little-endian

#define image_file_machine_powerpcfp 0x01f1

#define image_file_machine_ia64 0x0200 // intel 64

#define image_file_machine_mips16 0x0266 // mips

#define image_file_machine_alpha64 0x0284 // alpha64

#define image_file_machine_mipsfpu 0x0366 // mips

#define image_file_machine_mipsfpu16 0x0466 // mips

#define image_file_machine_axp64 image_file_machine_alpha64

#define image_file_machine_tricore 0x0520 // infineon

#define image_file_machine_cef 0x0cef

#define image_file_machine_ebc 0x0ebc // efi byte code

#define image_file_machine_amd64 0x8664 // amd64 (k8)

#define image_file_machine_m32r 0x9041 // m32r little-endian

#define image_file_machine_cee 0xc0ee

2.numberofsections 節區的數量 當定義的節區與實際節區不同時,將發生執行錯誤。

3.timedatestamp 編譯器建立此檔案的時間,它的數值是從2023年12月31日下午4:00開始到建立時間為止的總秒數

4. sizeofoptionalheader 可選頭的長度 32位是 e0h 64位是f0h

5. 屬性標誌字段,不同資料位定義了不同的檔案屬性,不同的定義將影響系統對檔案的裝入方式,可以是下面這些值按位相或。

#define image_file_relocs_stripped           0x0001  // relocation info stripped from file. 檔案中不存在重定位資訊

#define image_file_executable_image 0x0002 // file is executable (i.e. no unresolved externel references). 檔案是可執行的

#define image_file_line_nums_stripped 0x0004 // line nunbers stripped from file. 不存在行資訊

#define image_file_local_syms_stripped 0x0008 // local symbols stripped from file. 不存在符號資訊

#define image_file_aggresive_ws_trim 0x0010 // agressively trim working set 調整工作集

#define image_file_bytes_reversed_lo 0x0080 // bytes of machine word are reversed. 小尾方式

#define image_file_32bit_machine 0x0100 // 32 bit word machine. 只在32位平台上執行

#define image_file_debug_stripped 0x0200 // debugging info stripped from file in .dbg file 不包含除錯資訊

#define image_file_removable_run_from_swap 0x0400 // if image is on removable media, copy and run from the swap file. 不能從可移動盤執行

#define image_file_net_run_from_swap 0x0800 // if image is on net, copy and run from the swap file. 不能從網路執行

#define image_file_system 0x1000 // system file. 系統檔案(如驅動程式),不能直接執行

#define image_file_dll 0x2000 // file is a dll. 這是乙個dll檔案

#define image_file_up_system_only 0x4000 // file should only be run on a up machine 檔案不能在多處理器上計算機執行

#define image_file_bytes_reversed_hi 0x8000 // bytes of machine word are reversed. 大尾方式

可執行檔案包含0002 dll檔案包含2000h

普通可執行pe檔案 一般是010fh,dll檔案210eh

PE檔案頭入門

首先需要知道dos頭,其其資料結構不太需要知道,但需要知道其中的兩個和偏移 e magic word 0000h exe標誌,mz 頭 e lfanew dword 003ch pe 頭的偏移位址 整個資料結構大小為40h 這裡我們隨便找乙個.exe程式為例 找到了e flanew後就可以去找pe頭...

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