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

2020-11-15  本文已影响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 大尾方式
上一篇下一篇

猜你喜欢

热点阅读