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