Windows逆向工程提升之IMAGE_FILE_HEADER

目录

IMAGE_FILE_HEADER 介绍

IMAGE_FILE_HEADER 结构

核心字段解析

Machine(目标平台架构)

NumberOfSections(节数目)

TimeDateStamp(时间戳)

PointerToSymbolTable(符号表指针)

NumberOfSymbols(符号数目)

SizeOfOptionalHeader(可选头的大小)

Characteristics(文件属性标志)

IMAGE_FILE_HEADER 位置


IMAGE_FILE_HEADER 介绍

  • IMAGE_FILE_HEADER 是 PE 文件核心结构 IMAGE_NT_HEADERS 的一部分,它和可选头 (IMAGE_OPTIONAL_HEADER) 一起定义了文件的总体布局和属性。
  • IMAGE_FILE_HEADER 提供了有关文件物理布局和基本属性的信息,比如文件适用的处理器架构、节数目等。

IMAGE_FILE_HEADER 结构

typedef struct _IMAGE_FILE_HEADER {  
    WORD Machine;                 // 目标平台架构  
    WORD NumberOfSections;        // 文件中的节数目  
    DWORD TimeDateStamp;          // 文件的时间戳(编译时间)  
    DWORD PointerToSymbolTable;   // 符号表指针(调试使用)  
    DWORD NumberOfSymbols;        // 符号表中的符号数量(调试使用)  
    WORD SizeOfOptionalHeader;    // 可选头的大小(IMAGE_OPTIONAL_HEADER 的大小)  
    WORD Characteristics;         // 文件属性标志  
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;  

核心字段解析

Machine(目标平台架构)

  • 定义: 指明此 PE 文件的目标运行平台处理器架构。
  • 值:
    • IMAGE_FILE_MACHINE_I386 0x014C: Intel x86 (32位处理器)。
    • IMAGE_FILE_MACHINE_IA64 0x0200: Intel Itanium (IA64)。

NumberOfSections(节数目)

  • 定义: 文件中包含的节数量。
  • 作用:
    • 每个节的信息由 IMAGE_SECTION_HEADER 结构表示。
    • 从 NumberOfSections 可计算出文件的整体存储布局。
    • 文件中的节包括 .text、.data、.rdata、.bss 等。

TimeDateStamp(时间戳)

  • 定义: 编译文件时的时间戳,是一个从1970年1月1日开始按秒计数的值(Epoch Time)。
  • 作用:
    • 用于记录文件的创建时间。

PointerToSymbolTable(符号表指针)

  • 定义: 指向符号表的地址(绝对文件偏移值),主要用于调试用途。
  • 特点:
    • 在现代 Windows 应用中通常为 0,因为如今的调试符号存储在 PDB 文件中,而非 PE 文件。

NumberOfSymbols(符号数目)

  • 定义: 指明符号表中符号的数量。
  • 特点:
    • 在调试符号表为空时,此字段一般设置为 0。
    • 针对老旧(COFF)格式,符号表仍然包含调试符号的数据指针。

SizeOfOptionalHeader(可选头的大小)

  • 定义: 指 IMAGE_OPTIONAL_HEADER 的大小。
  • 值:
    • 对于 PE32 格式(32 位)文件,此值通常是 0x00E0(224 字节)。
    • 对于 PE32+ 格式(64 位)文件,此值通常是 0x00F0(240 字节)。

Characteristics(文件属性标志)

  • 定义: 指定文件的整体属性,是按位标志集合。
  • 常见标志值:
    • #define IMAGE_FILE_EXECUTABLE_IMAGE    0x0002 // 文件是可执行文件 
    • #define IMAGE_FILE_DLL                0x2000 // 文件是一个 DLL  
    • #define IMAGE_FILE_32BIT_MACHINE      0x0100 // 运行在 32 位机器上  

IMAGE_FILE_HEADER 位置

  1. PE 文件的物理结构:
    1. IMAGE_FILE_HEADER 紧随 IMAGE_NT_HEADERS.Signature ("PE\0\0") 字段之后。
    2. 通过 IMAGE_DOS_HEADER.e_lfanew 获取 NT 头的起始地址,从而定位 IMAGE_FILE_HEADER。
  2. 文件偏移计算示例:
  3. 文件偏移关系:  
    +----------------+  
    | IMAGE_DOS_HEADER |  
    +----------------+ <- e_lfanew 指向  
    | "PE\0\0"        |  
    | IMAGE_FILE_HEADER |  
    +----------------+  
    | IMAGE_OPTIONAL_HEADER |  
    +----------------+  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值