相对虚拟地址,PE文件结构解析
分类:澳门新萄京

中华VVA是周旋虚构地址(Relative Virtual Address卡塔尔的缩写。宝马X5VA是当PE 文件棉被服装载到内部存款和储蓄器中后,某些数据地点相对于文件头的偏移量。

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

  1、定位标准PE头

  DOS Stub长度不稳固,所以DOS头不是贰个长久大小的数据结构。DOS头放在PE的起第二地点,通过DOS头去牢固前面标准PE头的岗位正是经过字段e_lfanew。

  e_lfanew字段的值是二个绝对偏移量,相对定位时供给加上DOS MZ头的集散地址。

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

  PE_start = DOS MZ 基地址 IMAGE_DOS_HEADER.e_lfanew

  2、PE文件结构

  在30人系统下,最重视的部分是PE头和PE数据区。

  叁十位系统下的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是二个字节块,其剧情随着链接时使用的链接器不一样而区别,PE中并未有与之对应的有关组织。

  PE头标识Signature:

  在DOS Stub后的是PE 头标志Signature,PE尾部新闻中有一个四字节的标记,该标志放在指针IMAGE_DOS_HEADEPRADO.elfanew指向的职位。其剧情定位,对应于ASCII码

  的字符串“PE”。

  标准PE头IMAGE_FILE_HEADER:

  标准的PE头IMAGE_FILE_HEADEKuga在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_HEADEEvoque是上述三有的的总和,及Signature、IMAGE_FILE_HEADER和IMAGE_OPTIONAL_HEADER。

  该组织的亲力亲为定义如下:

  数据目录项IMAGE_DATA_DIRECTORY

  IMAGE_OPTIONAL_HEADEWrangler结构的尾声一个字段DataDirectory字段定义了PE文件中冒出全体不一致类型的多少的目录音讯。

  如导入表、导出表、财富和重定位表等。在内存中,这么些数量被操作系统以页为单位组织起来,并赋以分歧的会见属性。在文件中,这几个数量也大器晚成致被集体起来,遵照差别门类

各自存放在文书的钦定地方。

  该组织正是用来说述不相同品类的数码在文件(和内部存款和储蓄器卡塔尔国中的地点及大小。

  该数据目录中定义的数据类型一贯是种,PE中用多少目录项IMAGE_DATA_DIRECTO奇骏Y的数据结构定义每一种数据结构。

  结构定义如下:

  总得数据目录总共由17个风流倜傥律的IMAGE_DATA_DIRECTOCRUISERY结构三回九转排列在联合具名构成。

  节表项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_HEADEEvoque32。它是操作系统影象文件全数只有的尾部新闻。

  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,双字。编写翻译器成立此文件的时间戳。低34人存储的值是自一九六七年八月1日00:00早先到创制时间截至的总秒数。

  那几个值能够随意修正,对先后的运行未有影响。

  7.IMAGE_FILE_HEADER.PointerToSymbolTable:

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

  即使空中楼阁COFF符号表,此值为0.对此印象文件,那几个值为0。

  8.IMAGE_FILE_HEADER.NumberOfSymbols:

   0010h,双字。符号表夷则素的多寡。

相对虚拟地址,PE文件结构解析。  因为字符串表紧跟符号表,所以能够依照这些值定位字符串表。

  在印象文件中,那么些值为0,首要用来调节和测量检验。

  9.IAMGE_FILE_HEADER.SizeOfOptionalHeader:

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

  暗中认可情状下,那个值是00e0h,假若是60个人的PE文件,该协会暗中同意大小为00F0h。

  10.IMAGE_FILE_HEADER.Characteristics:

   0016h,单字。文件属性标识字段,它的不一致数量位定义了区别的文件属性。那是贰个相当重大的字段,区别的概念将震慑系统对文件的载入格局。

  对于经常的可施行PE文件来讲,这些字段的值一般是010fh,对于DLL文件来说,那个字段的值是210ch。

  第三位为1时,声明此影象文件是官方的,能够运营。倘若未设置此标识,表明现身链接器错误。

  第12位为1时,如若此印象文件在可活动存款和储蓄介质媒质上,加载器将完全加载它并把它复制到内部存款和储蓄器调换文件中。

  第12个人为1时,即便此印象文件在互联网上,那么加载器也将完全加载它并把它复制到内部存款和储蓄器调换文件中。

  当第拾三位为1时,申明此影象文件为动态链接库。那样的文本总被以为是可实践文件。

  可试行文件的注脚位被设置为010fh,即第0、1、2、3、8位分别棉被服装置为1,标记该文件为可试行文件,不含重从来音讯,不含符号音信和展现消息,文件只在叁10个人平台运

  行。

  6、扩展PE头IAMGE_OPTIONAL_HEADER32的字段

  11.IMAGE_OPTIONAL_HEADER32.Magic:

   0018h,单字。魔术字,表明文件的类型,纵然为010BH,则表示该文件为PE32;

  假诺为0107h,则象征为ROM影象;假如为020BH,则意味着文件为PE32 ,即六十五个人下的PE文件。

  12.IMAGE_OPTIONGAL_HEADER32.MajorLinkerVersion

  13.IMAGE_OPTIONAL_HEADER32.MinorLinkerVersion:

   001ah,单字。那四个字段都以字节型,钦赐链接的本子号,对实践未有其余影响。

  14.IAMGE_OPTIONAL_HEADER32.SizeOfCode:

    001ch,双字。全部代码节的总额(以字节总结卡塔 尔(英语:State of Qatar),该大小是基于文件对齐后的轻重,而非内部存款和储蓄器对齐后的轻重。

  15.IMAGE_OPTIONAL_HEADER32.SizeOfInitializedData:

   0020h,双字。全体满含已经伊始化的多寡的节的总大小。

  16.IMAGE_OPTIONAL_HEADER32.SizeOfUninitializedData:

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

  数据未被初叶化,在文书中不占用空间,但被加载到内存之后,PE加载程序会为那些数据分配适当大小的设想地址空间  

  17.IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint:

   0028h,双字。该字段值是三个景逸SUVVA,记录了开发银行代码间距该PE加载后的开局地方有多少个字节。

  假如三个可实行文件中附加了意气风发段本人的代码,并想让这段代码首先被推行,日常要更改这里的值,使其针对性本人代码的任务。

  对于常常程序印象,它正是开发行址。

  对于设备驱动文件来讲,它是带头化函数的地址。入口点对于DLL是可选的,假设官样文章入口点,那么些字段值必得设置为0。

  18.IMAGE_OPTIONAL_HEADER32.BaseOfCode:

   002Ch,双字。代码节的伊始路虎极光VA,表示印象被加载进内部存款和储蓄器时期码节的初始相对于影像营地址的撼动地址。平日景况下,代码节紧跟在PE底部后边,节的名号常常为

  “.text”。

  19.IMAGE_OPTIONAL_HEADER32.BaseOfData:

   0030h,双字。数据节的早先奥迪Q5VA,表示印象被加载进内存时数据节的起首相对于影像的集散地址的摇拽地址。平日情状下,数据节位于文件末尾,节的称号平常为“.data”。

  20.IMAGE_OPTIONAL_HEADER32.ImageBase:

   0034h,双字。该字段建议了PE印象的事先装入地址。就是在AddressOfEntryPoint中的程序被加载到内部存储器之后的EscortVA。

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

  如若操作系统也是依照那个地址加运载飞机器码到内部存款和储蓄器中,那么指令中多数永久音信就无需改正了,那样运维速度会快一些。

  对于EXE文件,各类文件使用的都以单独的设想地址孔家。所以,装入的地点平常不会被此外模块占有。EXE文件总能遵照这些地址装入,这就象征装入后的EXE文件无需

  进行重定位了。

  在链接的时候,能够应用参数“.base”来钦点优先装入的地点,假诺不钦命,链接器默许装入EXE的地点是0X00400000。相对于DLL文件, 暗许优先装入的地址是

0X1000000。集成用到多少个DLL文件,装入地址只怕会发生冲突,PE加载器会调节之中的值。

  能够自个儿定义这几个值,可是取值不可能超过边界,得到值必得在进度空间中,该值必需是64K的偏分头倍。

  21.IMAGE_OPTIONAL_HEADER32.SectionAlignment:

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

  SectionAlignment的值必得高于等于File阿里gnment的值。

  22.IMAGE_OPTIONAL_HEADER32.FileAlignment:

   003ch,双字。文件中节的对齐粒度。文件中节对齐是为着进步文书从磁盘加载的成效。

  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:

   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文件的照射尺寸。

  必须有限支撑它的值是SectionAlignment的莫西干发型倍。

  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,双字。起头化时保留栈的轻重。该字段表示为发轫线程的栈二保留的设想内部存款和储蓄器数量。该字段暗许值为0x100000(1MB卡塔尔。

  36.IMAGE_OPTIONAL_HEADER32.SizeOfStackCommit:

   0064h,双字。开端化时实际付出的栈的轻重。

  保险伊始线程的栈实际占用的内部存储器空间的分寸,它是被系统提交的。

  37.IMAGE_OPTIONAL_HEADER32.SizeOfHeapReserve:

   0068h,双字。伊始化保留的堆的分寸。用来保存开头进度堆使用的设想内部存储器,堆的句柄能够透过GetProcessHeap函数拿到。每多少个历程至少会有三个私下认可的长河堆,该堆在

  运维进程的时候被创立,在进度的生命周期中长久不会被剔除。默许值为1MB。

  38.IMAGE_OPTIONAL_HEADER32.SizeOfHeapCommit:

    006ch,双字。最早化时还关乎提交的堆大小。在进程开首化时设定的堆所占用的内部存款和储蓄器空间,私下认可值为1页。

  39.IMAGE_OPTIONAL_HEADER32.LoaderFlags:

   0070h,双字。加载标识。

    40.IMAGE_OPTIONAL_HEADER32.NumberOfRvaAndSzie:

         0074h,双字。定义数据目录结构的数目,平时为00000010h,即拾六个。

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

    41.IMAGE_OPTIONAL_HEADER32.DataDirectory:

         0078h,结构。

        由16个IMAGE_DATA_DIRECTO兰德MuranoY结构线性排列而成。定义PE文件中16中差别连串的数目所在的岗位和分寸。

  7、数据目录项IMAGE_DATA_DIRECTORY的字段

    42.IMAGE_DATA_DIRECTORY.VirtualAddress:

         0000h,双字。该字段记录了一定数据类型的发轫ENVISIONVA。针对不一致的数据结构,该字段包罗的数据含义不一致。

    43.IMAGE_DATA_DIRECTORY.isize:

         0004h,双字。该字段记录了特定项指标数据块的尺寸。

  8、节表项IMAGE_SECTION_HEADER

    44.IAMGE_SECTION_HEADER.Name1

         0000h,8字节。平日是以““结尾的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,双字。节的品质。

        该字段归属节的品质标记字段,此中不一致的多寡位代表了分化的习性。具体定义如下:         

1、定位标准PE头 DOS Stub长度不牢固,所以DOS头不是二个长久大小的数据结构。DOS头放在PE的发端地方,通过DO...

证实:本文件中各类文件头格式截图基本都出自看雪的《加密与解密》;本文格外《加密与解密》的读书笔记。

举个例子说:导入表的岗位和尺寸能够从PE文件头中IMAGE_OPTIONAL_HEADELX57032结构的数码目录字段中赢得,对应的体系是DataDirectory字段的首个IMAGE_DATA_DIRECTORY结构。从IMAGE_DATA_DIRECTOLacrosseY结构的VirtualAddress字段获得的是导入表的LANDVA值,假若在内部存款和储蓄器中查找导入表,那么将讴歌ZDXVA值加上PE文件装入的基址正是实际的地点;假若在PE文件中查找导入表,供给将EscortVA转换来File Offset(也等于数额在文件中的地点卡塔 尔(阿拉伯语:قطر‎。

 

RubiconVA调换成文件偏移地址的点子如下:

1.PE文书总体组织

PE文件架构,就是exe文件的制版结构。也正是说我们以十九进制展开二个.exe文件,先导的那几个剧情便是DOS头内容,下来是PE头内容,依次类推。

只要能认得到如此的内含,那么“exe起头的内容是或不是就直接是我们编辑的代码”(不是,领头是DOS头内容卡塔 尔(英语:State of Qatar)以至“我们编辑的代码被编辑到了exe文件的何地”(在.text段,.text具体地址由其相应的IMAGE_SECTION_HRADE福睿斯提议卡塔 尔(英语:State of Qatar)此类的难点答案就明摆着了。

图片 1

exe文件从磁盘加载到内存,各部份的前后相继顺序是涵养不改变的,但出于磁盘(常常200H卡塔 尔(阿拉伯语:قطر‎和内部存款和储蓄器(日常1000H卡塔 尔(阿拉伯语:قطر‎区块的对齐大小不一样等,所以相像内容在磁盘和在内部存款和储蓄器中的地点是不均等的。

换言之你在磁盘上收看生机勃勃段内容后生可畏剧情要到在内存中找到它--假使它是能映照到内容的部份--那么要做相应的地点转变。(譬如你在Ultraedit中见到某多少个字节而想在OllyDbg中找到那多少个字节那么须要举行地址调换卡塔 尔(英语:State of Qatar)

其余要在意,PE文件中存放的地点值都以内存中的地点,这个地址在OllyDbg中无需改动成其内定的义务就能够找到其针对性的内容;那要依赖那一个地址找到内容在Ultraedit的地点,须要将此普拉多VA址调换成文件偏移地址。

还要小心DOS头/PE头/块表,映射到内部存款和储蓄器时属同风流倜傥区块并且是首先区块,所以此三者上的本田UR-VVA和文书偏移地址是相等的。

图片 2

 

手续风度翩翩:循环扫描区块表得出每种区块在内部存款和储蓄器中的最初WranglerVA(依照IMAGE_SECTION_HEADEEvoque 中的VirtualAddress 字段卡塔尔,并根据区块的轻重(依据IMAGE_SECTION_HEADE奥德赛 中的SizeOfRawData 字段卡塔尔算出区块的截至 本田CR-VVA(两个相加就能够卡塔尔国,最终剖断指标 酷路泽VA 是或不是落在该区块内。
手续二:通过步骤一定位了对象 ENCOREVA 处于具体的某部区块中后,那么用目的 智跑VA 减去该区块的开场 奥迪Q7VA ,那样就能够收获指标 PRADOVA 相对于开端地址的偏移量 PRADOVA2.
手续三:在区块表中拿到该区块在文件中所处的摇摆地址(依据IMAGE_SECTION_HEADERubicon中的PointerToRawData 字段卡塔尔, 将这些偏移值加上步骤二获得的 CRUISERVA2 值,就赢得了确实的文本偏移地址。

 2.DOS头部

既,已知某虚构地址(如va卡塔 尔(阿拉伯语:قطر‎和某区块的虚构地址(text_va卡塔尔,设想地址在区块中,相同的时间还精通此区块在文件中的地点(text_file_offset卡塔尔,解出此虚拟地址在文件中的具体地方。解:依据他们的偏移量雷同(都以text_va

2.1MS-DOS头部(IMAGE_DOS_HEADER)

图片 3

最后的e_lfanew即是PE文件的RVA地址

图片 4

大家在前头已经提过,对于DOS头/PE头/区块表三片段LacrosseVA和文书偏移地址是相等的,所以上边在十四进制文本编缉器中,直接转向e_lfanew指向的000000B0能够正好找到PE头。

2.2DOS stub

DOS stub是当操作系统不援助PE文件时实行的片段,平时由编写翻译器本人生成内容是出口“This program cannot be run in MS-DOS mode”等唤醒。

PE文件头的职责由e_lfanew提议并非在一定地方,所以DOS stub允许你改成团结想要施行的代码,想写多少长度写多少长度;但貌似直接不理会。

 

  • va)可知,答案为 text_file_offset (text_va - va)。

3.PE头部

图片 5

3.1 PE Signature

八个字节,内容“PE”,对应十九进制“50 45 00 00”

 

3.2 IMAGE_FILE_HEADER

图片 6

SizeOfOptionalHeader指了OptionalHeader的大小,NumberOfSections提议了文本的区块数;未有指向OptionalHeader和区块表的指针,那暗中表示区块表紧接在OpthionalHeader后,OpthonalHeader紧接在FileHeader扣,紧接的情致是未曾空格的。

 

3.3 IMAGE_OPTIONAL_HEADER

图片 7

图片 8

内部ImageBase指出程序装载的营地址

 

4.区块表

4.1 IMAGE_NT_HEADER

图片 9

图片 10

里面VirtualAddress提出了区块步入内部存款和储蓄器后的奥迪Q5VA地址(OD找区块用这一个地址卡塔 尔(英语:State of Qatar)PointerToRawDATA建议区块在磁盘文件中的地址(十四进制编缉器找区块用那个地方卡塔尔国

 

4.2 文件偏移地址和相对偏移地址的折算

图片 11

图片 12

  1. 每个地区块作者无论多大,其本身差值都不会爱影响

2. 但倘若其尺寸大于200h那么会潜濡默化下后生可畏区块的差值:举例当.text大小大于200h那么.rdata的文件偏移量将会后移;要是.text大小大于1000h那么.rdata的EscortVA也会后移

3.也就说表10-7中的差值只是说通常是这样子,但当程序超级大时各个地区块的差值照旧得重新总括;当然无论什么样总是有:差值=区块EscortVA-区块文件偏移地址

 

5.数码目录表

数码目录表是IMAGE_OPTIONAL_HEADE奥迪Q7结构的最后三个分子,类型为IMAGE_DATA_DIRECTORY * 16

图片 13

数量目录表各成员职务由VirtualAddress提议,并且不是像PE头接在DOS头后左右同样,日常都在相当的远之处;所以平日都以跳过先讲罢区块然后再回头讲,也为此初读书人恐怕会倍感某些凌乱。

 

5.1输出表

多少目录表的率先个分子指向输出表的宝马7系VA,指向的地点是IMAGE_EXPORT_DIRECTORY结构。

图片 14

内部AddressofFunctions指向输出函数的地点数组,AddressOfNames指向输出函数的称呼数组,AddressOfNameOrdinale指向输出函数的出口序数数组。

AddressOfNames和AddressOfNameOrdinale的生机勃勃一是相同的,也正是说AddressOfNameOrdinale第叁个成分的值正是正是AddressOfNames第二个函数的出口序数,依次类推。

使用输出序数做为数组下标到AddressofFunctions指向的地址数组就能够找到函数对应的地点。PE重写IAT时行使GetProcAddress通过函数名得到函数地址基本也正是以此流程。

 

5.2输入表

数据目录表的第三个成员指向输入表的CRUISERVA;指向的地址是IMAGE_IMPORT_DESC哈弗IPTOWrangler(IID卡塔 尔(阿拉伯语:قطر‎结构,二个IID对应一个DLL,最终以二个全0的IID表示结束

图片 15

图片 16

 OriginalFristThunk和FirstThunk都指向IMAGE_THUNK_DATA结构;IMAGE_THUNK_DATA都照准同贰个IMAGE_IMPORT_BY_NAME

图片 17

图片 18

图片 19

 最注重的照旧要明白为啥须求INT和IAT多个东西指向同多少个事物;其流程是如此:

1.INT是不行写的,IAT是PE加载器可重写的

2.在编写翻译的时候,编写翻译器不懂IAT要填什么,就随意填成了和INT相通的从头到尾的经过(所以用十五进制编缉器查看时IAT和INT的情节是风度翩翩律的卡塔尔

3.PE装载器加载时依照INT找到IMAGE_IMPORT_BY_NAME中的函数名,然后接受GetProcAddress(HMODULE hModule,LPCSTOdysseylpProcName)找到函数对应之处(hModule是DLL的句柄,lpProcName是IMAGE_IMPORT_BY_NAME中的函数名卡塔尔

4.PE装载器使用查找到地点重写IAT(所以用OllyDbg查看时IAT和INT的情节是不相近的卡塔 尔(英语:State of Qatar)

5.所以能够直接那样通晓:IAT伊始是什吐槽内容并不焦急、INT就是为珍视写IAT而留存的

图片 20

 

5.3资源

windows系统中的各个可视成分叫做财富,富含神速键(Accelerator卡塔尔国、位图(Bitmap卡塔尔国、光标(Cursor卡塔尔国、对话框(Dialog Box卡塔尔、图标(Icon卡塔 尔(阿拉伯语:قطر‎、菜单(Menu卡塔尔、字符串表(String Table卡塔 尔(英语:State of Qatar)、工具栏(Toolbar卡塔 尔(英语:State of Qatar)、版本音讯(Version Information卡塔尔等。

数量目录表的第多个分子指向能源布局的奥迪Q5VA,财富结构近似是相近的三层IMAGE_RESOURCE_DIRECTORY n * IMAGE_RESOURCE_DIRECTORY_ENT福特ExplorerY加上指向最后财富代码的IMAGE_RESOURCE_DATA_ENTRY构成。

图片 21

中间NumberOfNameEntries的值加上NumberOfIdEntries的值等于紧接在IMAGE_RESOURCE_DIRECTORY后边的IMAGE_RESOURCE_DIRECTORY_ENTRY的个数。

图片 22

根据IMAGE_RESOURCE_DIRECTORY_ENT牧马人Y所在层级的两样,Name和OffsetToData的意思不均等。

Name:

随意在哪层,当最高位为1时逊色值做指针使用;当最高位为0时低位值做编号使用。

更生龙活虎的,日常在率先层时高位为0低位用做编号表示能源类型比如是对话框依旧菜单;第二上位为1不及为指向IMAGE_RESOURCE_DIR_STRING_U的指针该协会保留财富的称呼;第三层时高位为0低位用做编号表示该能源中的语言举例是英语依旧普通话。

OffsetToData:

甭管在哪层,当最高位为1时本着下生龙活虎层目录块的开局部址;当最高位为0时指向IMAGE_RESOURCE_DATA_ENTRY。

更生龙活虎的,平日在率先和第二层时最高位为1,指向下风姿浪漫层目录块的序曲地址;在第三层时最高位为0,指向IMAGE_RESOURCE_DATA_ENTRY。

本文由澳门新萄京发布于澳门新萄京,转载请注明出处:相对虚拟地址,PE文件结构解析

上一篇:澳门新萄京:win10怎么查看进程 下一篇:没有了
猜你喜欢
热门排行
精彩图文