PE文件头结构

    typedef struct _IMAGE_FILE_HEADER {  
        WORD    Machine;  运行平台
        WORD    NumberOfSections;  文件的节数目
        DWORD   TimeDateStamp;  文件创建日期和时间
        DWORD   PointerToSymbolTable;  指向符号表(用于调试)
        DWORD   NumberOfSymbols;  符号表中的符号数量(用于调试)
        WORD    SizeOfOptionalHeader;  可选头的长度
        WORD    Characteristics;  文件属性
    } 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 编译器创建此文件的时间,它的数值是从1969年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_LARGE_ADDRESS_AWARE       0x0020  // App can handle >2gb addresses  应用程序可处理大于2GB的地址
    #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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值