美文网首页
PE文件格式解析学习笔记(2)---PE Header(IMAG

PE文件格式解析学习笔记(2)---PE Header(IMAG

作者: 六亲不认的步伐 | 来源:发表于2020-11-15 20:37 被阅读0次

    NT Header

    NT Header是紧挨DOS MZ Header 与 DOS sub部分 ,主要包含三大部分内容PE标志,PE文件头,PE可选头

    PE文件格式概览
    图片转自:https://blog.csdn.net/evileagle/article/details/11693499

    PE 标志

    PE标志又称PE签名,即是PE入口标志,共占4Byte。此部分可以通过该标志来确定PE文件入口,此部分为固定内容[50 45 00 00]小端存储方式,同时也是NT头的第一大部分

    PE 标准文件头

    typedef struct _IMAGE_FILE_HEADER {
    +0x00 WORD Machine;
    +0x02 WORD NumberOfSections;
    +0x04 DWORD TimeDateStamp;
    +0x08 DWORD PointerToSymbolTable;
    +0x0c DWORD NumberOfSymbols;
    +0x10 WORD SizeOfOptionalHeader;
    +0x12 WORD Characteristics;
    } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
    

    代码部分中+代表相对偏移量(offset)

    PE-Header定义重要关键字段详解(共计20Byte)
    字段 含义 大小 成员位置
    Machine 可以运行在什么样CPU上 2Byte 1
    NumberOfSections 表示段的数量 2Byte 2
    TimeDateStamp 编译器写入的时间戳,与文件的创建时间,修改时间这些无关 4Byte 3
    SizeOfOptionalHeader 指定PE扩展头大小 2Byte 6
    Characteristics 文件属性,信息标记等 2Byte 7
    Machine字段补充说明

    常见的一些Machine字段取值说明,均为小端存储

    1. [4C 01]<14C:Intel 386以及后续>
    2. [64 86]<8664 x64框架>
    3. [00 00]<任意>
    NumberOfSections字段补充说明

    指明PE文件包含段的个数,例如 .text(代码段)、.rdata(只读数据段)、 .data(全局变量数据段)等

    TimeDateStamp字段补充说明

    从1970.1.1 00:00:00以来的秒数,他与文件的创建时间,修改时间这些无关

    SizeOfOptionalHeader字段补充说明

    默认32位PE文件则是224Byte [E0 00], 64位PE文件位240Byte [F0 00]

    Characteristics字段补充说明

    转为二进制,通过每一位组合后来查看含义,比如可以区分文件是exe还是dll等

    综上所述PE标准文件头大小固定,且为20Byte,共7大成员字段。其中关键字段成员为以上5大字段成员内容。

    继续以Kernel32.dll进行分析


    PE标准头部

    根据图中数据可以进行分析

    字段 含义 数值(小端存储)
    Machine Intel 386以及后续CPU运行 4C01
    NumberOfSections 表示段的数量为5 0500
    TimeDateStamp 编译器写入的时间戳 871FB759
    SizeOfOptionalHeader 指定PE扩展头大小为224Byte E000
    Characteristics 文件属性信息标记二进制位为 0221

    从分析中可以得出关键信息:此Kernel32.dll运行在的CPU环境以及使用是属于的32位PE文件
    关于Characteristics的分析 由于小端存储位0221实际存储位2102即二进制位0010 0001 0000 0010 拼接的数据,可根据查询各个位代表含义为:
    第1位:文件是可执行的
    第8位:只在32位平台上运行
    第13位:这是一个DLL文件
    通过分析3个1的位置得出文件属性结论:分析的kernel32.dll是一个可以在32位平台执行的dll文件

    补充 关于Characteristics字段详解

    位置 符号 含义
    0 IMAGE_ FILE_ RELOCS STRIPPED 文件中不存在重定位信息
    1 IMAGE_ FILE_ EXECUTABLE_ IMAGE 文件是可执行的
    2 IMAGE_ FILE_ LINE NUMS_STRIPPED 不存在行信息
    3 IMAGE_ FILE_ LOCAL. SYMS_ STRIPPED 不存在符号信息
    4 IMAGE_ FILE_ AGGRESSIVE_ Ws_ TRIM 调整工作集
    5 IMAGE_ FILE_ LARGE_ ADDRESS _AWARE 应用程序可处理大于2GB的地址
    6 此标志保留
    7 IMAGE_ FILE_ BYTES_REVERSED_LO 小尾方式
    8 IMAGE_ FILE_ 32BIT _MACHINE 只在32位平台上运行
    9 IMAGE_ FILE_ DEBUG STRIPPED 不包含调试信息
    10 IMAGE_ FILE_ REMOVABLE RUN_ FROM_ SWAP 不能从可移动盘运行
    11 IMAGE_ FILE NET_ RUN_ FROM_SWAP 不能从网络运行
    12 IMAGE_ FILE_ SYSTEM 系统文件(如驱动程序),不能直接运行
    13 IMAGE_ FILE_ DLL 这是一个DLL文件
    14 IMAGE_ FILE_ UP_ SYSTEM_ONLY 文件不能在多处理器计算机上运行
    15 IMAGE_ FILE_BYTES_ REVERSED_ HI 大尾方式

    相关文章

      网友评论

          本文标题:PE文件格式解析学习笔记(2)---PE Header(IMAG

          本文链接:https://www.haomeiwen.com/subject/mjbgvktx.html