菜单

[PE格式分析] 肆.IMAGE_FILE_HEADE中华V

2019年4月2日 - www6165com

源代码如下:

[PE格式分析] 4.IMAGE_FILE_HEADER,imagefileheader

源代码如下:

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;

Machine字段

常用的有:

宏定义 平台及相关意义 数值
IMAGE_FILE_MACHINE_I386 x86、Intel 386 0x014c
IMAGE_FILE_MACHINE_IA64 Intel Itanium、Intel 64 0x0200
IMAGE_FILE_MACHINE_AMD64 x64、AMD64 (K8) 0x8664

能够取值如下,摘取自源代码:

#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_R4000             0x0166  // MIPS little-endian
#define IMAGE_FILE_MACHINE_R10000            0x0168  // MIPS little-endian
#define IMAGE_FILE_MACHINE_WCEMIPSV2         0x0169  // MIPS little-endian WCE v2
#define IMAGE_FILE_MACHINE_ALPHA             0x0184  // Alpha_AXP
#define IMAGE_FILE_MACHINE_SH3               0x01a2  // SH3 little-endian
#define IMAGE_FILE_MACHINE_SH3DSP            0x01a3
#define IMAGE_FILE_MACHINE_SH3E              0x01a4  // SH3E little-endian
#define IMAGE_FILE_MACHINE_SH4               0x01a6  // SH4 little-endian
#define IMAGE_FILE_MACHINE_SH5               0x01a8  // SH5
#define IMAGE_FILE_MACHINE_ARM               0x01c0  // ARM Little-Endian
#define IMAGE_FILE_MACHINE_THUMB             0x01c2  // ARM Thumb/Thumb-2 Little-Endian
#define IMAGE_FILE_MACHINE_ARMNT             0x01c4  // ARM Thumb-2 Little-Endian
#define IMAGE_FILE_MACHINE_AM33              0x01d3
#define IMAGE_FILE_MACHINE_POWERPC           0x01F0  // IBM PowerPC Little-Endian
#define IMAGE_FILE_MACHINE_POWERPCFP         0x01f1
#define IMAGE_FILE_MACHINE_IA64              0x0200  // Intel 64
#define IMAGE_FILE_MACHINE_MIPS16            0x0266  // MIPS
#define IMAGE_FILE_MACHINE_ALPHA64           0x0284  // ALPHA64
#define IMAGE_FILE_MACHINE_MIPSFPU           0x0366  // MIPS
#define IMAGE_FILE_MACHINE_MIPSFPU16         0x0466  // MIPS
#define IMAGE_FILE_MACHINE_AXP64             IMAGE_FILE_MACHINE_ALPHA64
#define IMAGE_FILE_MACHINE_TRICORE           0x0520  // Infineon
#define IMAGE_FILE_MACHINE_CEF               0x0CEF
#define IMAGE_FILE_MACHINE_EBC               0x0EBC  // EFI Byte Code
#define IMAGE_FILE_MACHINE_AMD64             0x8664  // AMD64 (K8)
#define IMAGE_FILE_MACHINE_M32R              0x9041  // M32R little-endian
#define IMAGE_FILE_MACHINE_CEE               0xC0EE

实例图片:

其余二个事例:

NumberOfSections
    pe文件中区块的多寡。紧跟在本结构的末尾的。
TimeDateStamp
   
文件日期时间戳,指这些pe文件生成的流年,它的值是从一九七〇年七月二日1陆:00:00的话的秒数.
PointerToSymbolTable
    Coff调节和测试符号表的舞狮地址。
NumberOfSymbols
    Coff符号表中符号的个数. 那些域和前个域在release版本的先后里是0。
SizeOfOptionalHeader
   
IMAGE_OPTIONAL_HEADE奥迪Q53二结构的尺寸(即多少字节).大家随后就要涉及那些结构了.事实上,pe文件的大部分生死攸关的域都在IMAGE_OPTIONAL_HEADE卡宴结构里。(对于三1三个人PE文件,这一个值一般是00E0h;对于61个人PE32+文件,那个值一般是00F0h
)。
Characteristics
   
那几个域描述pe文件的一对属性新闻,比如是或不是可实施,是还是不是是多少个动态连接库等.具体定义如下:

#define IMAGE_FILE_RELOCS_STRIPPED           0x0001  // 重定位信息被移除,文件必须加载先前的基地址
#define IMAGE_FILE_EXECUTABLE_IMAGE          0x0002  // 文件可执行
#define IMAGE_FILE_LINE_NUMS_STRIPPED        0x0004  // 行号被移除
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED       0x0008  // 符号被移除
#define IMAGE_FILE_AGGRESIVE_WS_TRIM         0x0010  // Agressively trim working set
#define IMAGE_FILE_LARGE_ADDRESS_AWARE       0x0020  // 程序能处理大于2G的地址
#define IMAGE_FILE_BYTES_REVERSED_LO         0x0080  // Bytes of machine word are reversed.
#define IMAGE_FILE_32BIT_MACHINE             0x0100  // 32位机器
#define IMAGE_FILE_DEBUG_STRIPPED            0x0200  // .dbg文件的调试信息被移除
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP   0x0400  // 如果在移动介质中,拷到交换文件中运行
#define IMAGE_FILE_NET_RUN_FROM_SWAP         0x0800  // 如果在网络中,拷到交换文件中运行
#define IMAGE_FILE_SYSTEM                    0x1000  // 系统文件
#define IMAGE_FILE_DLL                       0x2000  // 文件是一个dll
#define IMAGE_FILE_UP_SYSTEM_ONLY            0x4000  // 文件只能运行在单处理器上
#define IMAGE_FILE_BYTES_REVERSED_HI         0x8000  // Bytes of machine word are reversed.

]
4.IMAGE_FILE_HEADE帕杰罗,imagefileheader 源代码如下: typedef struct
_IMAGE_FILE_HEADEHighlander { +0肆h WOPAJEROD Machine; // 运营平台 +0陆h WO逍客D
NumberOfSections; // 文件…

源代码如下:

PE文件结构详解,pe结构详解

  壹、定位标准PE头

  DOS
Stub长度不定点,所以DOS头不是七个确定地点大小的数据结构。DOS头放在PE的原初地点,通过DOS头去稳定前面标准PE头的职责正是经过字段e_lfanew。

  e_lfanew字段的值是一个相对偏移量,相对定位时要求加上DOS
MZ头的基地址。

  也便是PE头的相对地方是:

  PE_start = DOS MZ 基地址+IMAGE_DOS_HEADER.e_lfanew

  二、PE文件结构

  在31个人系统下,最重要的部分是PE头和PE数据区。

  31人系统下的PE文件被划分为:DOS MZ头、DOS Stub、PE头、节表和节内容。

  节表是PE中全体节的目录,每一种目录的字节码就是节内容,节内容依照目录里的指针指向的地方,分别将节的字节码在文书空间中排列起来,组成贰个完好无损的PE文件,PE文件

头等于DOS头加PE头。

  3、PE文件尾部解析 

  DOS MZ头IMAGE_DOS_HEADER:

  当中最重点的积极分子是e_magic成员和e_lfanew成员。

  DOS MZ头上边包车型地铁是DOS Stub。整个DOS
Stub是3个字节块,其情节随着链接时行使的链接器差异而分裂,PE中并未与之对应的连锁协会。

  PE头标识Signature:

  在DOS Stub后的是PE
头标识Signature,PE底部音信中有3个4字节的标识,该标识放在指针IMAGE_DOS_HEADE翼虎.elfanew指向的职务。其情节稳定,对应于ASCII码

  的字符串“PE\0\0”。

  标准PE头IMAGE_FILE_HEADER:

  标准的PE头IMAGE_FILE_HEADE奥迪Q7在PE底部标识后边,即位于elfanew值+四的地方。从此地点上马的十多少个字节为数据结构标准PE头IMAGE_FILE_HEADER的内容。(该结

构在微软官方文书档案中被称作标准通用对象文件格式)

  该有的记录了PE文件的大局属性,包蕴PE文件运营的阳台,PE文件类型(EXE
Or DLL?),文件中存在的节的总数等新闻。

  该有的用途:判断文件类型,获得PE文件中节的总量,当成节区消息举行遍历操作时的大循环次数。

    扩展PE头IMAGE_OPTIONAL_HEADER32

 存款和储蓄文件实施时的入口地址、文件被操作系统装入内存之后的暗中同意集散地址,节在磁盘和内部存款和储蓄器中的对其单位等消息。   

  PE头IAMGE_NT_HEADER:

  该片段是广义上的PE头,在专业PE文件中其大小为45六字节

  IMAGE_NT_HEADE索罗德是上述叁部分的总额,及Signature、IMAGE_FILE_HEADER和IMAGE_OPTIONAL_HEADER。

  该组织的详细定义如下:

  数据目录项IMAGE_DATA_DIRECTORY

  IMAGE_OPTIONAL_HEADE奥迪Q7结构的末梢二个字段DataDirectory字段定义了PE文件中出现全部区别门类的多少的目录消息。

  如导入表、导出表、财富和重定位表等。在内部存款和储蓄器中,那个数据被操作系统以页为单位团体起来,并赋以区别的造访属性。在文书中,那些数据也如出一辙被集团起来,依据不相同种类

独家寄存在文书的钦赐地点。

  该协会正是用来讲述分裂类其余数目在文书(和内部存款和储蓄器)中的地方及大小。

  该数额目录中定义的数据类型一向是种,PE中用多少目录项IMAGE_DATA_DIRECTOXC90Y的数据结构定义各类数据结构。

  结构定义如下:

  总得数据目录总共由十六个相同的IMAGE_DATA_DIRECTOHighlanderY结构一而再排列在联合署名构成。

  节表项IMAGE_SECTION_HEADER:

  节表位于IMAGE_NT_HEADELAND之后,由多个节表项(IMAGE_SECTION_HEADE君越)组成,每一个节表项记录了PE中与某些特定的节关于的消息,如节的性质,节的分寸,在

文件和内部存款和储蓄器中开场地点等。

  节表中的节的数量由字段IMAGE_FILE_HEADE卡宴中的NumberOfSection成员定义。

  节表的数据结构定义如下:

  4、PE头IMAGE_NT_HEADER的字段

  1.IMAGE_NT_HEADER.Signature

  +0000h,双字。PE文件标识,被定义为00004550h。

  假如更改内部任何2个字节,操作系统就会不能够把该文件识别为科学的PE文件。由于文件的DOS底部分从没被损坏,程序照旧能够在DOS环境下运营。

  2.IMAGE_NT_HEADER.FileHeader:

  +000四h,结构。该组织指向IMAGE_FILE_HEADER。

  3.IMAGE_NT_HEADER.OptionalHeader:

  +0018h,结构。那个指向IMAGE_OPTIONAL_HEADE驭胜3二。它是操作系统影像文件全体独有的底部消息。

  5、标准PE头IMAGE_FILE_HEADER的字段

  4.IMAGE_FILE_HEADER.Machine:

  +000四h,单字。钦定给PE文件运营的平台。

  5.IMAGE_FILE_HEADER.NumberOfSections:

  +0006h,单字。文件中留存的节的总额。

  在XP系统中,能够有0个节,不过数值不能够小于一,也不能够超越玖陆,假诺将该值设为0,操作系统在装载时会提醒不是可行的Win3二顺序。

  假如想在PE中增添或删除节,必须变更此处的值。

  那么些值不可能比实际内部存款和储蓄器中设有的节多,也不能够少,否则在装载的时候回出现谬误。

  6.IMAGE_FILE_HEADER.TimeDateStamp:

  +000八h,双字。编译器创制此文件的时间戳。低三十人存款和储蓄的值是自一玖6八年一月二十219日00:00开始到开创时间结束的总秒数。

  这一个值能够任由修改,对程序的周转未有影响。

  7.IMAGE_FILE_HEADER.PointerToSymbolTable:

  +000Ch,双字。COFF符号表的文本偏移。

  假若不存在COFF符号表,此值为0.对此影象文件,那几个值为0。

  8.IMAGE_FILE_HEADER.NumberOfSymbols:

  +0010h,双字。符号表中元素的数据。

  因为字符串表紧跟符号表,所以可以根据这几个值定位字符串表。

  在印象文件中,这些值为0,首要用来调节和测试。

  9.IAMGE_FILE_HEADER.SizeOfOptionalHeader:

  +001四h,单字。内定结构IMAGE_OPTIONAL_HEADER32的长度。

  暗中认可情状下,这么些值是00e0h,假设是61个人的PE文件,该协会暗许大小为00F0h。

  10.IMAGE_FILE_HEADER.Characteristics:

  +001六h,单字。文件属性标志字段,它的两样数量位定义了差别的文件属性。那是一个很重点的字段,分裂的定义将震慑系统对文件的载入方式。

  对于普通的可实施PE文件来说,那么些字段的值一般是0拾fh,对于DLL文件来说,这些字段的值是二10ch。

  第二位为1时,申明此影像文件是法定的,能够运作。假诺未设置此标志,注明出现链接器错误。

  第拾人为一时,假如此影像文件在可活动存款和储蓄介质上,加载器将完全加载它并把它复制到内部存款和储蓄器沟通文件中。

  第3一位为一时,倘若此影像文件在网络上,那么加载器也将完全加载它并把它复制到内存沟通文件中。

  当第二二位为一时,表明此影像文件为动态链接库。这样的文书总被认为是可执行文件。

  可执行文件的标志位被设置为0十fh,即第0、1、二、3、7个人分别被安装为一,标识该公文为可执行文件,不含重一直消息,不含符号音讯和行事音讯,文件只在三15位平台运

  行。

  6、扩展PE头IAMGE_OPTIONAL_HEADER32的字段

  11.IMAGE_OPTIONAL_HEADER32.Magic:

  +001八h,单字。魔术字,表达文件的项目,假使为010BH,则意味该公文为PE32;

  假诺为0拾柒h,则意味着为ROM影象;若是为020BH,则意味文件为PE32+,即陆十五位下的PE文件。

  12.IMAGE_OPTIONGAL_HEADER32.MajorLinkerVersion

  13.IMAGE_OPTIONAL_HEADER32.MinorLinkerVersion:

  +00①ah,单字。那多少个字段都以字节型,钦定链接的本子号,对推行未有别的影响。

  14.IAMGE_OPTIONAL_HEADER32.SizeOfCode:

   
+00一ch,双字。全数代码节的总数(以字节总计),该大小是依照文件对齐后的尺寸,而非内部存款和储蓄器对齐后的深浅。

  15.IMAGE_OPTIONAL_HEADER32.SizeOfInitializedData:

   +0020h,双字。全体包涵已经早先化的多寡的节的总大小。

  16.IMAGE_OPTIONAL_HEADER32.SizeOfUninitializedData:

  +002肆h,双字。全数包括未开始化数据的节的总大小。

  数据未被起初化,在文书中不占用空间,但被加载到内部存款和储蓄器之后,PE加载程序会为那么些多少分配适当大小的虚拟地址空间  

  17.IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint:

  +002八h,双字。该字段值是3个奇骏VA,记录了开发银行代码距离该PE加载后的开场地点有多少个字节。

  若是一个可执行文件中附加了1段自个儿的代码,并想让那段代码首先被实践,壹般要修改那里的值,使其针对性本身代码的任务。

  对于一般程序影像,它正是开发行址。

  对于设备驱动文件来说,它是早先化函数的地址。入口点对于DLL是可选的,借使不设有入口点,这么些字段值必须安装为0。

  18.IMAGE_OPTIONAL_HEADER32.BaseOfCode:

  +002Ch,双字。代码节的开端CR-VVA,表示影像被加载进内部存储器时期码节的初步相对于影像集散地址的撼动地址。一般意况下,代码节紧跟在PE底部后面,节的名号平时为

  “.text”。

  19.IMAGE_OPTIONAL_HEADER32.BaseOfData:

  +0030h,双字。数据节的初阶帕杰罗VA,表示影像被加载进内部存款和储蓄器时数据节的早先相对于影象的营地址的撼动地址。1般景观下,数据节位于文件末尾,节的称呼平日为“.data”。

  20.IMAGE_OPTIONAL_HEADER32.ImageBase:

  +003四h,双字。该字段提议了PE影像的事先装入地址。就是在AddressOfEntryPoint中的程序被加载到内部存款和储蓄器之后的福睿斯VA。

  链接器在产生可执行文件时,是对应以此地方生成机器码。

  固然操作系统也是根据这几个地点加运载飞机器码到内存中,那么指令中有的是定点音讯就不需求修改了,那样运维速度会快一些。

  对于EXE文件,每一个文件使用的都是独立的虚拟地址孔家。所以,装入的地点经常不会被别的模块占据。EXE文件总能遵照那几个地方装入,那就象征装入后的EXE文件不必要

  实行重定位了。

  在链接的时候,能够行使参数“.base”来内定优先装入的地址,假如不钦赐,链接器私下认可装入EXE的地方是0X00伍仟00。相对于DLL文件,
暗许优先装入的地址是

0X一千000。集成用到几个DLL文件,装入地址也许会爆发龃龉,PE加载器会调整之中的值。

  可以团结定义那么些值,不过取值不能够超越边界,取得值必须在进度空间中,该值必须是64K的平头倍。

  21.IMAGE_OPTIONAL_HEADER32.SectionAlignment:

  +003捌h,双字。内部存款和储蓄器中节的对齐粒度。该字段钦定了节被装入内部存款和储蓄器后的对齐单位。

  SectionAlignment的值必须大于等于FileAlignment的值。

  22.IMAGE_OPTIONAL_HEADER32.FileAlignment:

  +00三ch,双字。文件中节的对齐粒度。文件中节对齐是为了增长公文从磁盘加载的频率。

  Windows
XP用来公司硬盘的装有文件系统都以基于簇(分配单元)的,各种簇包括几个大体扇区。扇区是磁盘物理存取的细单反相飞机地方。簇越大,磁盘存款和储蓄音讯的容积就越大,但

  存取所消费的轩然大波越长。

  经常情形下,Windows会选取选择152字节的簇大小来格式化分区,最大可高达4KB。

  23.IMAGE_OPTIONAL_HEADER32.MajorOperatingSystemVersion:

  24.IMAGE_OPTIONAL_HEADER32.MinorOperatingSystemVersion:

  +0040h。上述五个字段都为单字,共计为双字。标识操作系统的本子号,分主版本号和次版本号。

  25.IMAGE_OPTIONAL_HEADER32.MajorImageVersion:

  26.IMAGE_OPTIONAL_HEADER32.MinorImageVersion:

  +004四h,双字。本PE文件影象的版本号。

  27.IMAGE_OPTIONAL_HEADER32.MajorSubsystemVersion  

  28.IMAGE_OPTIONAL_HEADER32.MinorSubsystemVersion

  +0048h,双字。运营所须要的子系统的版本号。

  29.IMAGE_OPTIONAL_HEADER32.Win32VersionValue:

  +00四ch,双字。子系统版本的值,一时半刻保留未用,必须安装为0。

  30.IMAGE_OPTIONAL_HEADER32.SizeOfImage:

  +0050h,双字。内部存款和储蓄器中整个PE文件的照耀尺寸。

  必须确定保证它的值是SectionAlignment的整好多倍。

  31.IMAGE_OPTIONAL_HEADER32.SizeOfHeaders:

  +005四h,双字。全体头+节表依据对齐粒度对齐后的轻重。

  32.IMAGE_OPTIONAL_HEADER32.Checksum

  +005八h,双字。检查评定和,大多数PE文件中,那么些值为0,可是在某些基础方式的驱动程序和种类DLL中,该值必须是不易的。

  33.IMAGE_OPTIONAL_HEADER32.Subsystem

  +00伍ch,单字。钦赐使用界面包车型客车子系统。取值如下:

  34.IMAGE_OPTIONAL_HEADER32.DllCharateristics

  +00伍eh,单字。DLL文件属性。是一个申明,不是指向DLL文件的,而是本着具有的PE文件。

  35.IMAGE_OPTIONAL_HEADER32.SizeOfStackReserve:

  +0060h,双字。开头化时保留栈的大小。该字段表示为最先线程的栈2保留的虚拟内存数量。该字段暗许值为0x一千00(1MB)。

  36.IMAGE_OPTIONAL_HEADER32.SizeOfStackCommit:

  +006四h,双字。开头化时实际交付的栈的轻重缓急。

  有限协理早先线程的栈实际占用的内部存款和储蓄器空间的深浅,它是被系统提交的。

  37.IMAGE_OPTIONAL_HEADER32.SizeOfHeapReserve:

  +006八h,双字。开端化保留的堆的大大小小。用来保存初叶进程堆使用的虚拟内部存款和储蓄器,堆的句柄能够通过GetProcessHeap函数获得。每贰个进度至
少会有1个暗许的长河堆,该堆在

  运维进度的时候被创设,在经过的生命周期中永远不会被删去。暗中同意值为1MB。

  38.IMAGE_OPTIONAL_HEADER32.SizeOfHeapCommit:

   +00六ch,双字。开首化时还涉及提交的堆大小。在进程初步化时设定的堆所占用的内部存款和储蓄器空间,暗中认可值为一页。

  39.IMAGE_OPTIONAL_HEADER32.LoaderFlags:

  +0070h,双字。加载标志。

    40.IMAGE_OPTIONAL_HEADER32.NumberOfRvaAndSzie:

        +007四h,双字。定义数据目录结构的多寡,1般为00000010h,即15个。

        该字段由SizeOfOptionalHeaders决定,实际行使中可取二~16.

    41.IMAGE_OPTIONAL_HEADER32.DataDirectory:

        +0078h,结构。

      
 由16个IMAGE_DATA_DIRECTOTiggoY结构线性排列而成。定义PE文件中1陆中不一致类别的数目所在的职位和尺寸。

  七、数据目录项IMAGE_DATA_DIRECTORY的字段

    42.IMAGE_DATA_DIRECTORY.VirtualAddress:

      
 +0000h,双字。该字段记录了一定数据类型的初阶揽胜VA。针对区别的数据结构,该字段包括的数额含义分歧。

    43.IMAGE_DATA_DIRECTORY.isize:

        +000四h,双字。该字段记录了一定项指标数据块的长短。

  8、节表项IMAGE_SECTION_HEADER

    44.IAMGE_SECTION_HEADER.Name1

      
 +0000h,八字节。常常是以“\0“结尾的ASCII码字符串”来标识节的称谓。内容可自动定义。

    45.IMAGE_SECTION_HEADER.Misc:

        +0008h,双字。

    46.IMAGE_SECTION_HEADER.VirtualAddress

        +000ch,双字。节区的RVA地址。

    47.IMAGE_SECTION_HEADER.SizeOfRawData

        +00十h,双字。节在文件对齐后的尺码。

    48.IMAGE_SECTION_HEADER.PointerToRawData:

        +001四h,双字。节区开始数据在文件中的偏移。

    49.IMAGE_SECTION_HEADER.PointerToRelocations:

        +0018h,双字。在“obj”文件中央银行使,指向重定位表的指针。

    50.IMAGE_SECTION_HEADER.PointerToLinenumbers

        +00一ch,双字。行号表的地点。

    51.IMAGE_SECTION_HEADER.NumberOfRelocations

        +0020h,单字。重定位表的个数。(在OBJ文件中运用)

    52.IMAGE_SECTION_HEADER.NumberOfLinenumbers

        +0022h,单字。行号表中央银行号的数额。

    53.IMAGE_SECTION_HEADER.Characteristics:

        +00二4h,双字。节的性质。

      
 该字段属于节的属性标志字段,当中不相同的数额位代表了不一样的质量。具体定义如下:
    
   

1、定位标准PE头 DOS
Stub长度不固定,所以DOS头不是三个稳定大小的数据结构。DOS头放在PE的前奏地点,通过DO…

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;
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;

Machine字段

Machine字段

常用的有:

常用的有:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图