逆向工程

连载13:IMAGE_FILE_HEADER 字段解释

2020-02-13  本文已影响0人  码农UP2U

回顾 IMAGE_FILE_HEADER 数据结构

上篇文章已经给出了 IMAGE_FILE_HEADER 的定义,这里再次回顾一下该数据结构,其数据结构的定义如下:

//
// File header format.
//

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;

#define IMAGE_SIZEOF_FILE_HEADER             20

该定义在 winnt.h 文件中,且该数据结构的大小为 20 个字节,该数据结构的大小在 winnt.h 中由宏给出了定义。

下面对它的字段进行一个解释

IMAGE_FILE_HEADER 数据结构解释

IMAGE_FILE_HEADER 结构体中的字段实际能用到的一共由 4 个,分别是:MachineNumberOfSectionsSizeOfOptionalHeaderCharacteristics

#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_POWERPCFP         0x01f1
#define IMAGE_FILE_MACHINE_IA64              0x0200  // Intel 64
……

常见的两个分别是 IMAGE_FILE_MACHINE_I386IMAGE_FILE_MACHINE_IA64

IMAGE_FILE_MACHINE_I386 表示该可执行程序为 Intel 32 位兼容平台
IMAGE_FILE_MACHINE_IA64 表示该可执行程序为 Intel 64 位兼容平台

#define IMAGE_FILE_RELOCS_STRIPPED           0x0001  // Relocation info stripped from file.
#define IMAGE_FILE_EXECUTABLE_IMAGE          0x0002  // File is executable  (i.e. no unresolved external 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  // Aggressively trim working set
#define IMAGE_FILE_LARGE_ADDRESS_AWARE       0x0020  // App can handle >2gb addresses
#define IMAGE_FILE_BYTES_REVERSED_LO         0x0080  // Bytes of machine word are reversed.
#define IMAGE_FILE_32BIT_MACHINE             0x0100  // 32 bit word machine.
#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.
#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.

其中,常见的有 IMAGE_FILE_RELOCS_STRIPPEDIMAGE_FILE_EXECUTABLE_IMAGEIMAGE_FILE_SYSTEMIMAGE_FILE_DLLIMAGE_FILE_32BIT_MACHINE

IMAGE_FILE_RELOCS_STRIPPED:文件中不存在重定位信息
IMAGE_FILE_EXECUTABLE_IMAGE:文件可执行
IMAGE_FILE_SYSTEM:系统文件
IMAGE_FILE_DLL:DLL 文件
IMAGE_FILE_32BIT_MACHINE:目标平台为 32 位平台

Characteristics 通常是由若干个宏 或运算 后的值

本篇文章把 IMAGE_FILE_HEADER 进行了解释,关于 IMAGE_FILE_HEADER 结构体在 PE 文件中的具体分析在下篇文章中进行介绍。



微信中搜索 “码农UP2U” 关注我的公众号吧!!!
上一篇下一篇

猜你喜欢

热点阅读