首先是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 
{
+04h    WORD        Machine;                                // 运行平台
+06h    WORD        NumberOfSections;           // 文件的区块数目
+08h DWORD       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_I3860x014c  

x86

IMAGE_FILE_MACHINE_IA640x0200

Intel Itanium

IMAGE_FILE_MACHINE_AMD640x8664

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。)小甲鱼温馨提示:多种属性可以通过 “或运算” 使得同时拥有!
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_IMAGE0x0002

The file is executable (there are no unresolved

external references).

IMAGE_FILE_LINE_NUMS_STRIPPED0x0004

COFF line numbers were stripped from the

file.

IMAGE_FILE_LOCAL_SYMS_STRIPPED0x0008

COFF symbol table entries were stripped from

file.

IMAGE_FILE_AGGRESIVE_WS_TRIM0x0010

Aggressively trim the working set. This value is

obsolete as of Windows 2000.

IMAGE_FILE_LARGE_ADDRESS_AWARE0x0020

The application can handle addresses larger

than 2 GB.

IMAGE_FILE_BYTES_REVERSED_LO0x0080

The bytes of the word are reversed. This flag

is obsolete.

IMAGE_FILE_32BIT_MACHINE0x0100

The computer supports 32-bit words.

IMAGE_FILE_DEBUG_STRIPPED0x0200

Debugging information was removed and stored

separately in another file.

IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP0x0400

If the image is on removable media, copy it to

and run it from the swap file.

IMAGE_FILE_NET_RUN_FROM_SWAP0x0800

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

run it from the swap file.

IMAGE_FILE_SYSTEM0x1000

The image is a system file.

IMAGE_FILE_DLL0x2000

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

file, it cannot be run directly.

IMAGE_FILE_UP_SYSTEM_ONLY0x4000

The file should be run only on a uniprocessor

computer.

IMAGE_FILE_BYTES_REVERSED_HI0x8000

The bytes of the word are reversed. This flag

is obsolete.

转载于:https://www.cnblogs.com/mayingkun/p/4200022.html

PE详解之IMAGE_NT_HEADERS结构定义即各个属性的作用(PE详解02)相关推荐

  1. Ecstore 中数据表结构定义 dbschema 详解

    详解Ecstore中的数据表结构定义文件dbschema 任何系统的操作无非都是对数据库的各种操作的结合,而对于ecstore的数据库操作可能与其他常见项目有些不太一样.可能有新入手的朋友会尝试在数据 ...

  2. DDR3内存详解,存储器结构+时序+初始化过程

    转载 DDR3内存详解,存储器结构+时序+初始化过程 2017-06-17 16:10:33 a_chinese_man 阅读数 23423更多 分类专栏: 硬件开发基础 转自:http://www. ...

  3. 详解10G以太网结构、PMD接口及应用的相关知识

    详解10G以太网结构.PMD接口及应用的相关知识 现在10Gbps的以太网标准已经由IEEE 802.3工作组于2000年正式制定,10G以太网仍使用与以往10Mbps和100Mbps以太网相同的形式 ...

  4. java 抽象 属性_在java中如何定义一个抽象属性示例详解

    前言 本文主要给大家介绍的是在java中定义一个抽象属性的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: Abstract关键字通常被用于类和方法,用来把某些行为的实现委托给 ...

  5. html标签的下一级遍历,jquery属性,遍历,HTML操作方法详解

    Jquery属性遍历.HTML操作. Jquery拥有可操作HTML元素和属性的强大方法. 下面是我整理的一些jquery遍历函数: .add() 将元素添加到匹配元素的集合中. .andSelf() ...

  6. P2P技术详解(三):P2P技术之STUN、TURN、ICE详解

    本文是<P2P理论详解>系列文章中的第2篇,总目录如下: <P2P技术详解(一):NAT详解--详细原理.P2P简介> <P2P技术详解(二):P2P中的NAT穿越(打洞 ...

  7. 【文本信息抽取与结构化】详聊文本的结构化【上】

    常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识图谱.信息抽取.文本摘要这些任务中格外明 ...

  8. 【文本信息抽取与结构化】详聊文本的结构化【下】

    常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识图谱.信息抽取.文本摘要这些任务中格外明 ...

  9. 「文本信息抽取与结构化」详聊文本的结构化「下」

    2020-02-19 08:20:08 常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识 ...

  10. python3类的继承详解_python3中类的继承以及self和super的区别详解

    python中类的继承: 子类继承父类,及子类拥有了父类的 属性 和 方法. python中类的初始化都是__init__().所以父类和子类的初始化方式都是__init__(),但是如果子类初始化时 ...

最新文章

  1. 终于有人把云计算、物联网和大数据讲明白了!
  2. sklearn构建stacking模型进行堆叠多模型分层级回归分析
  3. Head First C 第八章 静态库与动态库 创建动态库
  4. C语言文件操作解析(二)
  5. MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构
  6. D3---01基础的柱状图制作(转)
  7. 狼叔直播 Reaction《学习指北:Node.js 2022 全解析》
  8. CodeForces - 1017D The Wu
  9. Combobox绑定数据源DataSet
  10. 面试者应向公司问什么问题?
  11. java super.getclass_详解java中this.getClass()和super.getClass()的实例
  12. 禅道的下载与安装教程
  13. 运动耳机什么款式好、最适合运动的耳机类型
  14. Open the World 丨 COSCon'22志愿者招募正式启动
  15. 搬砖(二分答案 + 线性规划)
  16. Nature | 基于细菌构建具有类真核细胞结构和功能的人工细胞
  17. 那些年,我们一起做过的 Java 课后练习题(51 - 55)
  18. OpenCV之轮廓检测(检测银行卡上的黑色磁条)
  19. 小白用ESP8266NodeMcu机智云SOC方案开发经验分享
  20. 从负债累累到老板,00后的逆袭之路

热门文章

  1. 常用SNS开源交友系统比较
  2. (转载)找工作那年,我真的哭了
  3. PHP设计模式——适配器模式
  4. 洛谷 P1054 等价表达式
  5. HtmlCleaner CleanerProperties 参数配置(转自macken博客,链接:http://macken.iteye.com/blog/1579809)...
  6. C# 数组转换为DataTable 的三个方法
  7. flash与javacript:图片交互
  8. 小议数据库主键选取策略(转)
  9. 电路板的信号完整性问题及原因
  10. 嵌入Windows User Control到ASP.NET web form