zoukankan      html  css  js  c++  java
  • 小甲鱼PE详解之IMAGE_NT_HEADERS结构定义即各个属性的作用(PE详解02)

    PE Header 是PE相关结构NT映像头(IMAGE_NT_HEADER)的简称,里边包含着许多PE装载器用到的重要字段。下边小甲鱼将为大家详细讲解哈~

    首先是IMAGE_NT_HEADERS 结构的定义:(啥?结构不会,先看看小甲鱼童鞋的《零基础入门学习C语言》关于结构方面的章节吧~)

    IMAGE_NT_HEADERS STRUCT 

    +0hDWORDSignature  //
    +4h  IMAGE_FILE_HEADER FileHeader //
    +18hIMAGE_OPTIONAL_HEADER32OptionalHeader   //
    } IMAGE_NT_HEADERS ENDS

    Signature 字段:
    在一个有效的 PE 文件里,Signature 字段被设置为00004550h, ASCII 码字符是“PE00”。标志这 PE 文件头的开始。
    “PE00” 字符串是 PE 文件头的开始,DOS 头部的 e_lfanew 字段正是指向这里。
    如下图所示:



    IMAGE_FILE_HEADER 结构

    typedef struct _IMAGE_FILE_HEADER 
    {
    +04hWORD  Machine;                              // 运行平台
    +06h  WORD  NumberOfSections;// 文件的区块数目
    +08hDWORD TimeDateStamp;// 文件创建日期和时间
    +0Ch  DWORD PointerToSymbolTable;// 指向符号表(主要用于调试)
    +10h DWORD NumberOfSymbols;// 符号表中符号个数(同上)
    +14h  WORD  SizeOfOptionalHeader;// IMAGE_OPTIONAL_HEADER32 结构大小
    +16h  WORD  Characteristics;// 文件属性
    } IMAGE_FILE_HEADER,  *PIMAGE_FILE_HEADER;
    
    
    该结构如下图所示:


    下边,小甲鱼童鞋为大家详细解释各个成员的含义和用法:

    (1)Machine:可执行文件的目标CPU类型。

    Value Meaning
    IMAGE_FILE_MACHINE_I386
    0x014c  

    x86

    IMAGE_FILE_MACHINE_IA64
    0x0200

    Intel Itanium

    IMAGE_FILE_MACHINE_AMD64
    0x8664

    x64


    (2)NumberOfSection: 区块的数目。(注:区块表是紧跟在 IMAGE_NT_HEADERS 后边的)
    (3)TimeDataStamp: 表明文件是何时被创建的。
    这个值是自1970年1月1日以来用格林威治时间(GMT)计算的秒数,这个值是比文件系统(FILESYSTEM)的日期时间更加精确的指示器。如何将这个值翻译请看:http://home.fishc.com/space.php?uid=9&do=blog&id=555
    提示:VC的话可以用_ctime 函数或者 gmtime 函数。

    (4)PointerToSymbolTable: COFF 符号表的文件偏移位置,现在基本没用了。
    (5)NumberOfSymbols: 如果有COFF 符号表,它代表其中的符号数目,COFF符号是一个大小固定的结构,如果想找到COFF 符号表的结束位置,则需要这个变量。

    (6)SizeOfOptionalHeader: 紧跟着IMAGE_FILE_HEADER 后边的数据结构(IMAGE_OPTIONAL_HEADER)的大小。(对于32位PE文件,这个值通常是00E0h;对于64位PE32+文件,这个值是00F0h )。
    (7)Characteristics: 文件属性,有选择的通过几个值可以运算得到。( 这些标志的有效值是定义于 winnt.h 内的 IMAGE_FILE_** 的值,具体含义见下表。普通的EXE文件这个字段的值一般是 0100h,DLL文件这个字段的值一般是 210Eh。)小甲鱼温馨提示:多种属性可以通过 “或运算” 使得同时拥有!

    The characteristics of the image. This member can be one or more of the following values.

    Value Meaning
    IMAGE_FILE_RELOCS_STRIPPED   
    0x0001

    Relocation information was stripped from the 

    file. The file must be loaded at its preferred

    base address. If the base address is not 

    available, the loader reports an error.

    IMAGE_FILE_EXECUTABLE_IMAGE
    0x0002

    The file is executable (there are no unresolved 

    external references).

    IMAGE_FILE_LINE_NUMS_STRIPPED
    0x0004

    COFF line numbers were stripped from the 

    file.

    IMAGE_FILE_LOCAL_SYMS_STRIPPED
    0x0008

    COFF symbol table entries were stripped from 

    file.

    IMAGE_FILE_AGGRESIVE_WS_TRIM
    0x0010

    Aggressively trim the working set. This value is 

    obsolete as of Windows 2000.

    IMAGE_FILE_LARGE_ADDRESS_AWARE
    0x0020

    The application can handle addresses larger 

    than 2 GB.

    IMAGE_FILE_BYTES_REVERSED_LO
    0x0080

    The bytes of the word are reversed. This flag

     is obsolete.

    IMAGE_FILE_32BIT_MACHINE
    0x0100

    The computer supports 32-bit words.

    IMAGE_FILE_DEBUG_STRIPPED
    0x0200

    Debugging information was removed and stored 

    separately in another file.

    IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
    0x0400

    If the image is on removable media, copy it to

    and run it from the swap file.

    IMAGE_FILE_NET_RUN_FROM_SWAP
    0x0800

    If the image is on the network, copy it to and 

    run it from the swap file.

    IMAGE_FILE_SYSTEM
    0x1000

    The image is a system file.

    IMAGE_FILE_DLL
    0x2000

    The image is a DLL file. While it is an executable

     file, it cannot be run directly.

    IMAGE_FILE_UP_SYSTEM_ONLY
    0x4000

    The file should be run only on a uniprocessor

     computer.

    IMAGE_FILE_BYTES_REVERSED_HI
    0x8000

    The bytes of the word are reversed. This flag

     is obsolete.


  • 相关阅读:
    启用 Win10 的 Linux 子系统
    破解 RHEL7.3 的 root 密码
    实战:tcpdump抓包分析三次握手四次挥手
    grep中的正则表达式
    快速配置yum本地源
    Kubernetes 集群搭建(下)
    从事游戏行业也有10年,让我来说下游戏的本质,为什么上瘾。
    Egret 生成 自带EUI 的微信小游戏 踩坑!
    JMeter入门
    像屎一样的 Spring Boot入门,总算有反应了
  • 原文地址:https://www.cnblogs.com/kuangke/p/5392890.html
Copyright © 2011-2022 走看看