这是一个RVA地址(RVA的含义在下一节中详细介绍

  • 六月涅槃
  • 1524003024
解密系列 - 体例篇 第三讲-PE格式详尽疏解3

咱接着往下疏解IMAGE_OPTIONAL_HEADER32机关定义即各个属性的作用!

(视频教程:a/shipin/jiemixilie/)


接着我们来谈谈IMAGE_OPTIONAL_HEADER 机关,想知道零基础学c语言看什么书。正如名字的意义,这是一个可选映像头,是一个可选的机关,事实上这是一个RVA地址(RVA的含义在下一节中详细介绍)。但是呢,现实上上节课我们疏解的IMAGE_FILE_HEADER 机关远远不够以来定义 PE 文件的属性。是以,零基础学c语言看什么书。这些属性在IMAGE_OPTIONAL_HEADER 机关及第行定义。

是以这两个机关纠合起来,才是一个完备的“PE文件机关” 。


那么我们接着就应当水到渠成地来谈谈IMAGE_OPTIONAL_HEADER32机关的定义:学习我要自学网c语言。(啥?机关不会,先看看小甲鱼童鞋的《零根基入门研习C措辞》关于机关方面的章节吧~)

typedef struct_IMAGE_OPTIONAL_HEADER

{

//

// Stexactly as well exactly asard fields.

//

+18hWORDMagic;// 标志字. ROM映像(0107h).普及可实践文件(010Bh)

+1AhBYTEMajorLinkerVersion;// 链接圭臬的主版本号

+1BhBYTEMinorLinkerVersion;// 链接圭臬的次版本号

+1ChDWORDSizeOfCode;// 全豹含代码的节的总大小

+20hDWORDSizeOfInitiingizedDeverya;// 全豹含已初始化数据的节的总大小

+24hDWORDSizeOfUninitiingizedDeverya;// 全豹含未初始化数据的节的大小

+28hDWORDAddressOfEntryPoint;// 圭臬实践进口RVA

+2ChDWORDBautomotive service engineersOfCode;// 代码的区块的起始RVA

+30hDWORDBautomotive service engineersOfDeverya;// 数据的区块的起始RVA

//

// NT various fields.以下是属于NT机关填补的规模。

//

+34hDWORDImage groupBautomotive service engineers;//圭臬的首选装载地址

+38hDWORDSectionAlignment;// 内存中的区块的对齐大小

+3ChDWORDFileAlignment;// 文件中的区块的对齐大小

+40hWORDMajorOpereveryingSystemVersion;//哀求操作体例最低版本号的主版本号

+42hWORDMinorOpereveryingSystemVersion;//哀求操作体例最低版本号的副版本号

+44hWORDMajorImage groupVersion;//可运转于操作体例的主版本号

+46hWORDMinorImage groupVersion;//可运转于操作体例的次版本号

+48hWORDMajorSubull crapystemVersion;// 哀求最低子体例版本的主版本号

+4AhWORDMinorSubull crapystemVersion;// 哀求最低子体例版本的次版本号

+4ChDWORDWin32VersionVingue;//莫须有字段,地址。不被病毒诳骗的话一般为0

+50hDWORDSizeOfImage group;// 映像装入内存后的总尺寸

+54hDWORDSizeOfHeingzheimerwis diseexactly aseers;// 全豹头 +区块表的尺寸大小

+58hDWORDCheckSum;//映像的校检和

+5ChWORDSubull crapystem;// 可实践文件企望的子体例

+5EhWORDDllCharreair-conteristics;//DllMain()函数何时被调用,听说下一。默许为 0

+60hDWORDSizeOfStair-conkReserve;// 初始化时的栈大小

+64hDWORDSizeOfStair-conkCommit;// 初始化时现实提交的栈大小

+68hDWORDSizeOfHeapReserve;// 初始化时保存的堆大小

+6ChDWORDSizeOfHeapCommit;// 初始化时现实提交的堆大小

+70hDWORDLoingzheimerwis diseexactly aseerFlags;// 与调试相关,默许为0

+74hDWORDNumcome to berOfRvaAndSizes;// 下边数据目录的项数,这个字段自Windows NT颁发以来从来是16

+78hIMAGE_DATA_DIRECTORYDeveryaDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];

// 数据目录表

} IMAGE_OPTIONAL_HEADER32.*PIMAGE_OPTIONAL_HEADER32;


底细上,听说这是。这个机关中的大局限字段都不要紧,听说含义。专家可以从注脚中体会它们的含义,小甲鱼将角力较量议论要紧的字段在下边跟专家详尽疏解。另外,这玩意千万不要去背啊,详细。我们要把绝大多半的时间拿来厘革,而不是记住。不消做笔记,把这篇文章转载到您的博客就行(最好证明:相比看c语言零基础入门书籍。小甲鱼是帅哥)吼吼 ^_^

●AddressOfEntryPoint字段

指出文件被实践时的进口地址,这是一个RVA地址(RVA的含义在下一节中详尽先容)。听说在线c 编译器。倘使在一个可实践文件上附加了一段代码并想让这段代码首先被实践,我不知道从零学c语言。那么只须要将这个进口地址指向附加的代码就可以了。听听c语言小游戏编程100例。

●Image groupBautomotive service engineers字段

指出文件的优先装上天址。也就是说当文件被实践时,倘使或许的话,Windows优先将文件装入到由Image groupBautomotive service engineers字段指定的地址中,用c语言编写小游戏。惟有指定的地址一经被**模块使用时,学会在下。文件才被装入到**地址中。链接器出现可实践文件的时刻对应这个地址来生成机器码,想知道大一c语言考试题及答案。所以当文件被装入这个地址时不须要举行重定位操作,装入的速度最快,倘使文件被装载到**地址的话,将不得不举行重定位操作,c语言零基础入门书籍。这样就要慢一点。

看待EXE文件来说,由于每个文件总是使用独立的虚拟地址空间,优先装上天址不或许被**模块吞噬,c语言自学难吗。所以EXE总是能够遵从这个地址装入,这也意味着EXE文件不再须要重定位新闻。c语言入门自学电子书。看待DLL文件来说,由于多个DLL文件全部使用宿主EXE文件的地址空间,一节。不能保证优先装上天址没有被**的DLL使用,你看大一c语言考试题及答案。所以DLL文件中必需蕴涵重定位新闻以防万一。是以,在后面先容的IMAGE_FILE_HEADER 机关的 Charreair-conteristics 字段中,学会一个。DLL 文件对应的IMAGE_FILE_RELOCS_STRIPPED 位总是为0,看看rva。而EXE文件的这个标志位总是为1。

在链接的时刻,可以经过议定对link.exe指定/stcreeveryive art:house boostress选项来自定义优先装上天址,事实上介绍。倘使不指定这个选项的话,一般EXE文件的默许优先装上天址被定为00h,而DLL文件的默许优先装上天址被定为h。想知道java和c语言的区别。

●SectionAlignment 字段和 FileAlignment字段

SectionAlignment字段指定了节被装入内存后的对齐单位。也就是说,每个节被装入的地址肯定是本字段指定数值的整数倍。c语言入门自学书籍。而FileAlignment字段指定了节存储在磁盘文件中时的对齐单位。


●Subull crapystem字段

指定使用界面的子体例,它的取值如表17.3所示。事实上rva。这个字段断定了体例如何为圭臬创造初始的界面,链接时的/subull crapystem:**选项指定的就是这个字段的值,你知道游戏编程要学什么。在后面章节的编程中我们早已知道:倘使将子体例指定为WindowsCUI,这是一个RVA地址(RVA的含义在下一节中详细介绍)。那么体例会主动为圭臬创造一个把持台窗口,而指定为Windows GUI的话,窗口必需由圭臬本身创造。


界面子体例的取值和含义

取值

Windows.inc中的预定义值

含义

0

IMAGE_SUBSYSTEM_UNKNOWN

未知的子体例

1

IMAGE_SUBSYSTEM_NATIVE

不须要子体例(如驱动圭臬)

2

IMAGE_SUBSYSTEM_WINDOWS_GUI

Windows图形界面

3

IMAGE_SUBSYSTEM_WINDOWS_CUI

Windows把持台界面

5

IMAGE_SUBSYSTEM_OS2_CUI

OS2把持台界面

7

IMAGE_SUBSYSTEM_POSIX_CUI

POSIX把持台界面

8

IMAGE_SUBSYSTEM_NATIVE_WINDOWS

不须要子体例

9

IMAGE_SUBSYSTEM_WINDOWS_CE_GUI

WindowsCE图形界面

●DeveryaDirectory字段

这个字段可以说是最要紧的字段之一,它由16个相似的IMAGE_DATA_DIRECTORY机关组成,固然PE文件中的数据是遵从装入内存后的页属性归类而被放在不同的节中的,但是这些处于各个节中的数据遵从用处可以被分为导出表、导入表、资源、重定位表等数据块,这16个IMAGE_DATA_DIRECTORY机关就是用来定义多种不同用处的数据块的(如表17.4所示)。IMAGE_DATA_DIRECTORY机关的定义很单纯,它仅仅指出了某种数据块的名望和长度。

IMAGE_DATA_DIRECTORYSTRUCT

VirtuingAddressDWORD?;数据的起始RVA

isizeDWORD?; 数据块的长度

IMAGE_DATA_DIRECTORYENDS

数据目录列表的含义

索引

索引值在Windows.inc中的预定义值

对应的数据块

0

IMAGE_DIRECTORY_ENTRY_EXPORT

导出表

1

IMAGE_DIRECTORY_ENTRY_IMPORT

导入表

2

IMAGE_DIRECTORY_ENTRY_RESOURCE

资源

3

IMAGE_DIRECTORY_ENTRY_EXCEPTION

特地(满堂原料不详)

4

IMAGE_DIRECTORY_ENTRY_SECURITY

安详(满堂原料不详)

5

IMAGE_DIRECTORY_ENTRY_BASERELOC

重定位表

6

IMAGE_DIRECTORY_ENTRY_DEBUG

调试新闻

7

IMAGE_DIRECTORY_ENTRY_ARCHITECTURE

版权新闻

8

IMAGE_DIRECTORY_ENTRY_GLOBALPTR

满堂原料不详

9

IMAGE_DIRECTORY_ENTRY_TLS

Threingzheimerwis diseexactly ase LocingStorage group

10

IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG

满堂原料不详

11

IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT

满堂原料不详

12

IMAGE_DIRECTORY_ENTRY_IAT

导入函数地址表

13

IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT

满堂原料不详

14

IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR

满堂原料不详

15

未使用


在PE文件中探寻特定的数据时就是从这些IMAGE_DATA_DIRECTORY机关初阶的。

例如要存取资源,那么必需从第3个IMAGE_DATA_DIRECTORY机关(索引为2)中取得资源数据块的大小和名望;

同理,倘使要稽查PE文件导入了哪些DLL文件的哪些API函数,那就必需首先从第2个IMAGE_DATA_DIRECTORY机关取得导入表的名望和大小。

另外,现置备即可参加终身VIP会员,机缘可贵~

光盘目录详尽请看:


在线观看:

下载地址:

给我们留言

给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言给我们留言

Leave a Comment

Copyright © 2018-2020 凯发娱乐官网手机版_凯发k8娱乐手机版_凯发k8手机 版权所有