[PE格式分析] 4.IMAGE_FILE_HEADE库罗德,imagefileheader

源代码如下:

[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文件生成的光阴,它的值是从1970年7月三11日16:00:00的话的秒数.
PointerToSymbolTable
    Coff调节和测试符号表的晃动地址。
NumberOfSymbols
    Coff符号表中符号的个数. 这些域和前个域在release版本的顺序里是0。
SizeOfOptionalHeader
   
IMAGE_OPTIONAL_HEADE科雷傲32结构的分寸(即多少字节).大家跟着就要提到那个协会了.事实上,pe文件的大部分至关心重视要的域都在IMAGE_OPTIONAL_HEADE福睿斯结构里。(对于三15个人PE文件,那几个值一般是00E0h;对于6四位PE32+文件,这一个值一般是00F0h
)。
Characteristics
   
那些域描述pe文件的局地品质音信,比如是否可举办,是或不是是3个动态连接库等.具体定义如下:

#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_HEADE酷路泽 { +04h WO昂科拉D Machine; // 运维平台 +06h WOGL450D
NumberOfSections; // 文件…

源代码如下:

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

  一 、定位标准PE头

  DOS
Stub长度不固定,所以DOS头不是1个一定大小的数据结构。DOS头放在PE的原初地方,通过DOS头去稳定前面标准PE头的地点就是通过字段e_lfanew。

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

  也正是PE头的断然地点是:

  PE_start = DOS MZ 基地址+IMAGE_DOS_HEADER.e_lfanew

  贰 、PE文件结构

  在3二位系统下,最要紧的有个别是PE头和PE数据区。

  三12位系统下的PE文件被剪切为:DOS MZ头、DOS Stub、PE头、节表和节内容。

  节表是PE中全部节的目录,每一个目录的字节码正是节内容,节内容遵照目录里的指针指向的地方,分别将节的字节码在文件空间中排列起来,组成叁个全体的PE文件,PE文件

头等于DOS头加PE头。

  三 、PE文件底部解析 

  DOS MZ头IMAGE_DOS_HEADER:

  当中最要害的分子是e_magic成员和e_lfanew成员。

  DOS MZ头上边包车型客车是DOS Stub。整个DOS
Stub是一个字节块,其内容随着链接时行使的链接器差异而各异,PE中并没有与之相应的连锁协会。

  PE头标识Signature:

  在DOS Stub后的是PE
头标识Signature,PE尾部新闻中有三个四字节的标识,该标识放在指针IMAGE_DOS_HEADELacrosse.elfanew指向的任务。其剧情定位,对应于ASCII码

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

  标准PE头IMAGE_FILE_HEADER:

  标准的PE头IMAGE_FILE_HEADE卡宴在PE底部标识前面,即位于elfanew值+4的职位。从此地点上马的十八个字节为数据结构标准PE头IMAGE_FILE_HEADER的内容。(该结

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

  该部分记录了PE文件的全局属性,包罗PE文件运维的平台,PE文件类型(EXE
Or DLL?),文件中设有的节的总和等消息。

  该部分用途:判断文件类型,获得PE文件中节的总量,当成节区消息进行遍历操作时的巡回次数。

    扩展PE头IMAGE_OPTIONAL_HEADER32

 存款和储蓄文件实施时的入口地址、文件被操作系统装入内部存款和储蓄器之后的私下认可集散地址,节在磁盘和内部存款和储蓄器中的对其单位等音讯。   

  PE头IAMGE_NT_HEADER:

  该有的是广义上的PE头,在行业内部PE文件中其大小为456字节

  IMAGE_NT_HEADE福特Explorer是上述三片段的总和,及Signature、IMAGE_FILE_HEADER和IMAGE_OPTIONAL_HEADER。

  该协会的事无巨细定义如下:

  数据目录项IMAGE_DATA_DIRECTORY

  IMAGE_OPTIONAL_HEADEMurano结构的末段二个字段DataDirectory字段定义了PE文件中出现全数区别类型的多少的目录音信。

  如导入表、导出表、财富和重定位表等。在内存中,这么些多少被操作系统以页为单位协会起来,并赋以不一致的走访属性。在文件中,那个数量也同等被组织起来,根据区别品种

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

  该组织正是用来讲述分歧门类的多少在文书(和内存)中的地点及大小。

  该数据目录中定义的数据类型一贯是种,PE中用数码目录项IMAGE_DATA_DIRECTO讴歌RDXY的数据结构定义各样数据结构。

  结构定义如下:

  总得数据目录总共由14个相同的IMAGE_DATA_DIRECTO中华VY结构一而再排列在协同组成。

  节表项IMAGE_SECTION_HEADER:

  节表位于IMAGE_NT_HEADE途乐之后,由四个节表项(IMAGE_SECTION_HEADE安德拉)组成,每一种节表项记录了PE中与某些特定的节关于的音讯,如节的品质,节的轻重缓急,在

文件和内部存款和储蓄器中开局地方等。

  节表中的节的数额由字段IMAGE_FILE_HEADE昂科雷中的NumberOfSection成员定义。

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

  4、PE头IMAGE_NT_HEADER的字段

  1.IMAGE_NT_HEADER.Signature

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

  假诺改变内部任何三个字节,操作系统就会不可能把该文件识别为科学的PE文件。由于文件的DOS底部分从没被破坏,程序还能在DOS环境下运营。

  2.IMAGE_NT_HEADER.FileHeader:

  +0004h,结构。该协会指向IMAGE_FILE_HEADER。

  3.IMAGE_NT_HEADER.OptionalHeader:

  +0018h,结构。那几个指向IMAGE_OPTIONAL_HEADE福特Explorer32。它是操作系统印象文件全部独有的头顶音信。

  5、标准PE头IMAGE_FILE_HEADER的字段

  4.IMAGE_FILE_HEADER.Machine:

  +0004h,单字。钦命给PE文件运行的平台。

  5.IMAGE_FILE_HEADER.NumberOfSections:

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

  在XP系统中,可以有0个节,但是数值无法小于1,也不能够超越96,若是将该值设为0,操作系统在装载时会提醒不是卓有成效的Win32程序。

  假使想在PE中加进或删除节,必须变更此处的值。

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

  6.IMAGE_FILE_HEADER.TimeDateStamp:

  +0008h,双字。编写翻译器创制此文件的光阴戳。低叁拾位存款和储蓄的值是自1966年一月15日00:00上马到开创时间结束的总秒数。

  这几个值能够不管修改,对先后的运转没有影响。

  7.IMAGE_FILE_HEADER.PointerToSymbolTable:

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

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

  8.IMAGE_FILE_HEADER.NumberOfSymbols:

  +0010h,双字。符号表七月素的数据。

  因为字符串表紧跟符号表,所以能够遵照这么些值定位字符串表。

  在影象文件中,这几个值为0,首要用于调节和测试。

  9.IAMGE_FILE_HEADER.SizeOfOptionalHeader:

  +0014h,单字。钦点结构IMAGE_OPTIONAL_HEADER32的长度。

  暗许景况下,那些值是00e0h,假使是陆拾人的PE文件,该组织暗中同意大小为00F0h。

  10.IMAGE_FILE_HEADER.Characteristics:

  +0016h,单字。文件属性标志字段,它的分化数量位定义了不一样的文件属性。那是贰个很要紧的字段,不一致的定义将影响系统对文件的载入方式。

  对于常见的可进行PE文件来说,这几个字段的值一般是010fh,对于DLL文件来说,这些字段的值是210ch。

  第①位为1时,注解此影象文件是法定的,能够运行。假使未安装此标志,证明出现链接器错误。

  第7位为1时,借使此影象文件在可活动存款和储蓄介质上,加载器将完全加载它并把它复制到内存交流文件中。

  第3一个人为1时,借使此影象文件在互连网上,那么加载器也将完全加载它并把它复制到内部存款和储蓄器交流文件中。

  当第一3个人为1时,证明此影象文件为动态链接库。这样的文书总被认为是可执行文件。

  可执行文件的注解位被安装为010fh,即第0、一 、贰 、叁 、五个人分别被装置为1,标识该公文为可执行文件,不含重平昔音讯,不含符号音讯和行为消息,文件只在叁13人平台运

  行。

  6、扩展PE头IAMGE_OPTIONAL_HEADER32的字段

  11.IMAGE_OPTIONAL_HEADER32.Magic:

  +0018h,单字。魔术字,表达文件的品类,假如为010BH,则意味着该公文为PE32;

  尽管为0107h,则代表为ROM印象;即便为020BH,则代表文件为PE32+,即63个人下的PE文件。

  12.IMAGE_OPTIONGAL_HEADER32.MajorLinkerVersion

  13.IMAGE_OPTIONAL_HEADER32.MinorLinkerVersion:

  +001ah,单字。那多少个字段都以字节型,钦定链接的版本号,对推行没有任何影响。

  14.IAMGE_OPTIONAL_HEADER32.SizeOfCode:

   
+001ch,双字。全体代码节的总数(以字节总结),该大小是根据文件对齐后的高低,而非内部存款和储蓄器对齐后的高低。

  15.IMAGE_OPTIONAL_HEADER32.SizeOfInitializedData:

   +0020h,双字。全部包蕴已经开始化的数额的节的总大小。

  16.IMAGE_OPTIONAL_HEADER32.SizeOfUninitializedData:

  +0024h,双字。全数包涵未初阶化数据的节的总大小。

  数据未被开首化,在文书中不占用空间,但被加载到内部存储器之后,PE加载程序会为这一个数据分配适当大小的虚拟地址空间  

  17.IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint:

  +0028h,双字。该字段值是二个安德拉VA,记录了运营代码距离该PE加载后的发端地方某个许个字节。

  假使一个可执行文件中附加了一段自个儿的代码,并想让那段代码首先被实施,一般要修改那里的值,使其针对性自身代码的职位。

  对于一般程序影像,它便是运行地址。

  对于设备驱动文件来说,它是起头化函数的地方。入口点对于DLL是可选的,假若不存在入口点,这一个字段值必须设置为0。

  18.IMAGE_OPTIONAL_HEADER32.BaseOfCode:

  +002Ch,双字。代码节的起先帕杰罗VA,表示影像被加载进内部存款和储蓄器时期码节的开头相对于影像营地址的舞狮地址。一般意况下,代码节紧跟在PE尾部后边,节的称谓常常为

  “.text”。

  19.IMAGE_OPTIONAL_HEADER32.BaseOfData:

  +0030h,双字。数据节的起首MuranoVA,表示印象被加载进内部存款和储蓄器时数据节的伊始相对于影象的营地址的晃动地址。一般景色下,数据节位于文件末尾,节的名称日常为“.data”。

  20.IMAGE_OPTIONAL_HEADER32.ImageBase:

  +0034h,双字。该字段提议了PE印象的优先装入地址。就是在AddressOfEntryPoint中的程序被加载到内存之后的XC60VA。

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

  假诺操作系统也是依照这一个地方加运载飞机器码到内部存款和储蓄器中,那么指令中有的是稳定音信就不供给修改了,那样运营速度会快一些。

  对于EXE文件,各种文件使用的都是单独的虚拟地址孔家。所以,装入的地点平日不会被其余模块占据。EXE文件总能根据那一个地方装入,那就表示装入后的EXE文件不须求

  进行重定位了。

  在链接的时候,能够动用参数“.base”来钦点优先装入的地点,借使不钦定,链接器默许装入EXE的地方是0X00400000。相对于DLL文件,
暗中同意优先装入的地址是

0X1000000。集成用到三个DLL文件,装入地址只怕会发生争辩,PE加载器会调整之中的值。

  可以协调定义那么些值,不过取值不可能凌驾边界,取得值必须在进度空间中,该值必须是64K的整数倍。

  21.IMAGE_OPTIONAL_HEADER32.SectionAlignment:

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

  SectionAlignment的值必须超出等于FileAlignment的值。

  22.IMAGE_OPTIONAL_HEADER32.FileAlignment:

  +003ch,双字。文件中节的对齐粒度。文件中节对齐是为着抓实公文从磁盘加载的效能。

  Windows
XP用来公司硬盘的保有文件系统都以基于簇(分配单元)的,各类簇包含几个大体扇区。扇区是磁盘物理存取的微乎其单反位。簇越大,磁盘存款和储蓄信息的体量就越大,但

  存取所消费的风浪越长。

  平日意况下,Windows会选用使用152字节的簇大小来格式化分区,最大可直达4KB。

  23.IMAGE_365bet体育在线网投,OPTIONAL_HEADER32.MajorOperatingSystemVersion:

  24.IMAGE_OPTIONAL_HEADER32.MinorOperatingSystemVersion:

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

  25.IMAGE_OPTIONAL_HEADER32.MajorImageVersion:

  26.IMAGE_OPTIONAL_HEADER32.MinorImageVersion:

  +0044h,双字。本PE文件影像的版本号。

  27.IMAGE_OPTIONAL_HEADER32.MajorSubsystemVersion  

  28.IMAGE_OPTIONAL_HEADER32.MinorSubsystemVersion

  +0048h,双字。运维所急需的子系统的版本号。

  29.IMAGE_OPTIONAL_HEADER32.Win32VersionValue:

  +004ch,双字。子系统版本的值,一时保留未用,必须设置为0。

  30.IMAGE_OPTIONAL_HEADER32.SizeOfImage:

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

  必须保险它的值是Section阿里gnment的平头倍。

  31.IMAGE_OPTIONAL_HEADER32.SizeOfHeaders:

  +0054h,双字。全体头+节表依照对齐粒度对齐后的深浅。

  32.IMAGE_OPTIONAL_HEADER32.Checksum

  +0058h,双字。检验和,超过一半PE文件中,这些值为0,可是在有的基础情势的驱动程序和种类DLL中,该值必须是不利的。

  33.IMAGE_OPTIONAL_HEADER32.Subsystem

  +005ch,单字。钦命使用界面包车型大巴子系统。取值如下:

  34.IMAGE_OPTIONAL_HEADER32.DllCharateristics

  +005eh,单字。DLL文件属性。是八个标明,不是针对DLL文件的,而是指向富有的PE文件。

  35.IMAGE_OPTIONAL_HEADER32.SizeOfStackReserve:

  +0060h,双字。开头化时保留栈的轻重。该字段表示为早先线程的栈二保留的虚拟内部存款和储蓄器数量。该字段暗中同意值为0x一千00(1MB)。

  36.IMAGE_OPTIONAL_HEADER32.SizeOfStackCommit:

  +0064h,双字。伊始化时实际付出的栈的大大小小。

  保证初叶线程的栈实际占用的内部存款和储蓄器空间的深浅,它是被系统提交的。

  37.IMAGE_OPTIONAL_HEADER32.SizeOfHeapReserve:

  +0068h,双字。开始化保留的堆的大大小小。用来保存早先进程堆使用的虚拟内部存储器,堆的句柄能够通过GetProcessHeap函数得到。每二个进度至
少会有3个默许的进度堆,该堆在

  运行进度的时候被创设,在经过的生命周期中永远不会被去除。暗中认可值为1MB。

  38.IMAGE_OPTIONAL_HEADER32.SizeOfHeapCommit:

   +006ch,双字。开端化时还论及提交的堆大小。在进度伊始化时设定的堆所占用的内部存款和储蓄器空间,暗中同意值为1页。

  39.IMAGE_OPTIONAL_HEADER32.LoaderFlags:

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

    40.IMAGE_OPTIONAL_HEADER32.NumberOfRvaAndSzie:

        +0074h,双字。定义数据目录结构的数据,一般为00000010h,即1多少个。

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

    41.IMAGE_OPTIONAL_HEADER32.DataDirectory:

        +0078h,结构。

      
 由16个IMAGE_DATA_DIRECTOSportageY结构线性排列而成。定义PE文件中16中不一致档次的数据所在的职位和大小。

  柒 、数据目录项IMAGE_DATA_DIRECTORY的字段

    42.IMAGE_DATA_DIRECTORY.VirtualAddress:

      
 +0000h,双字。该字段记录了特定数据类型的伊始KugaVA。针对分裂的数据结构,该字段包括的数量含义差别。

    43.IMAGE_DATA_DIRECTORY.isize:

        +0004h,双字。该字段记录了一定项目标数据块的长度。

  8、节表项IMAGE_SECTION_HEADER

    44.IAMGE_SECTION_HEADER.Name1

      
 +0000h,8字节。日常是以“\0“结尾的ASCII码字符串”来标识节的名号。内容可机关定义。

    45.IMAGE_SECTION_HEADER.Misc:

        +0008h,双字。

    46.IMAGE_SECTION_HEADER.VirtualAddress

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

    47.IMAGE_SECTION_HEADER.SizeOfRawData

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

    48.IMAGE_SECTION_HEADER.PointerToRawData:

        +0014h,双字。节区初阶数据在文书中的偏移。

    49.IMAGE_SECTION_HEADER.PointerToRelocations:

        +0018h,双字。在“obj”文件中利用,指向重定位表的指针。

    50.IMAGE_SECTION_HEADER.PointerToLinenumbers

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

    51.IMAGE_SECTION_HEADER.NumberOfRelocations

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

    52.IMAGE_SECTION_HEADER.NumberOfLinenumbers

        +0022h,单字。行号表中行号的数据。

    53.IMAGE_SECTION_HEADER.Characteristics:

        +0024h,双字。节的质量。

      
 该字段属于节的本性标志字段,在那之中分化的多寡位代表了分裂的质量。具体定义如下:
    
   

① 、定位标准PE头 DOS
Stub长度不定点,所以DOS头不是1个稳住大小的数据结构。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字段

常用的有:

常用的有:

发表评论

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