菜单

2进制文件概述

2019年4月28日 - www6165com

  内部存款和储蓄器管理器能够使进度在骨子里唯有51贰MB物理内部存款和储蓄器的处境下使过程“认为”本人装有四GB内部存储器(其中囊括代码,
栈空间,能源区,动态链接库等)。

|  .rsrc   00004000   000003A0  00000A00  00000400  C0000040|

 

装载与动态链接

  私下认可景况下:一般PE文件的0字节
=》虚拟内部存款和储蓄器0x00伍仟00职责,即所谓的装载地方。

源文档 <>

“This program cannot be run is MS-DOS
mode”,DOS尾部中第2是WO本田CR-VD e_magic和 LONG
e_lfanew那些字段比较主要。那几个数据结构能够在winnt.h中找到。

DLL优化

  PE(Portable
Executable)是win3贰阳台下可实践遵守的数据格式。平常广泛的诸如*.exe和*.dll都是PE文件。

 

 DOS文件头就到这边了,接下去继续介绍PE头,也正是IMAGE_NT_HEADE汉兰达,上面包车型客车代码是对于定义3二照旧64的PE头,我们得以看到相应的宏语句

Windows下的动态链接

typedef struct _IMAGE_EXPORT_DIRECTORY {
    DWORD   Characteristics;
    DWORD   TimeDateStamp;
    WORD    MajorVersion;
    WORD    MinorVersion;
    DWORD   Name;
    DWORD   Base;
    DWORD   NumberOfFunctions;
    DWORD   NumberOfNames;
    DWORD   AddressOfFunctions;     // RVA from base of image
    DWORD   AddressOfNames;         // RVA from base of image
    DWORD   AddressOfNameOrdinals;  // RVA from base of image
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

澳门金沙国际 1

typedef struct _IMAGE_IMPORT_DESCRIPTOR {
    union {
        DWORD   Characteristics;            // 0 for terminating null import descriptor
        DWORD   OriginalFirstThunk;         // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
    } DUMMYUNIONNAME;
    DWORD   TimeDateStamp;                  // 0 if not bound,
                                            // -1 if bound, and real date\time stamp
                                            //     in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
                                            // O.W. date/time stamp of DLL bound to (Old BIND)

    DWORD   ForwarderChain;                 // -1 if no forwarders
    DWORD   Name;
    DWORD   FirstThunk;                     // RVA to IAT (if bound this IAT has actual addresses)
} IMAGE_IMPORT_DESCRIPTOR;

  在PE文件中,以磁盘数据标准存放(大家掌握硬盘以三个section为骨干单位,即512byte),0x200字节,当一个数据节不足0x200字节时填充0x00;

FileOffset = VA – ImageBase – VRk = 00401325 – 00400000 – C00 = 725

设若系统成功找到那个文件,就会回来该可实施文件可能DLL文件影象加载到的集散地址。

参考作品

Windows下动态链接之二:DLL优化加快
如何晓得DLL不是地点毫无干系的?DLL与ELF的对照分析

  (一).文件偏移地址(File Offset):数据在PE文件中的地址,在磁盘上存放时相对于文件开首的舞狮。

如VA = 0040一千 (虚拟地址)

再有也足以使用LordPE的PE
editor来查阅那么些目录,今后的查看目录表的工具诸多。。。。。

可实行文件的装载与经过

澳门金沙国际 2

澳门金沙国际 3

 

PE文件中出现HummerH二VA的
概念是因为PE的内部存储器影象和磁盘文件印象是不一致的,同一数据相对于文件头的偏移量在内部存款和储蓄器5月在磁盘文件中可能是不一致的,为了升高效能,PE文件头中使用的
都是内部存款和储蓄器印象中的偏移量,也正是帕杰罗VA。从图17.三中也能够收获另一个定论,那正是冠道VA仅仅是对此地处节中的数据来讲的,对于文本头和节表而言无所谓
CR-VVA和文件偏移,因为它们在被映射到内部存款和储蓄器中后不论是大大小小只怕摇头都不会有别的改造。

如上就是二个PE文件的构造图,PE文件使用的是3个平面地址空间,全体的数码都融入在一块儿,文件的始末又被分割为不一样的区块(Section),

动态链接

澳门金沙国际 4

澳门金沙国际 5

PLT0:
push *(GOT +4)
jump *(GOT+8)

...

bar@plt:
jmp *(bar@GOT)
push n
jump PLT0

  那万1有用户供给收取高出实际金额数如何做,操作系统原理中有“虚拟内部存款和储蓄器”概念,
即在那种场合下有时会将“部分硬盘空间”临时作为内部存款和储蓄器使用。(两者“虚拟内部存储器“概念对象区别,不宜混为一谈)

 

接下去大家看一下IMAGE_OPTIONAL_HEADE大切诺基这一个结构体,一样上面的是这几个结构体在winnt.h中的定义,上面那个是叁十一个人的,还有陆拾人的,不过繁多的,能够看winnt.htypedef
struct _IMAGE_OPTIONAL_HEADER

  按上表,举例总计虚拟内部存款和储蓄器中0x004041四一处的一条指令,要换算出该指令在文书中的偏移量:

VBMWX叁k = VOffset – ROffset = 0000一千 – 00000400 = C00 (得出文件虚拟地址和文书物理址之间的VOdysseyk值)

澳门金沙国际 6

      文件偏移量 = 0x004041四一 – 0x00四千00(默许的Image
Base)-(0x一千 – 0x400)(代码存于.text文件中) = 0x35④1

ImageBase = 00400000 (基地址)

 

  标准PE文件一般包罗:.text(编写翻译器产生,存放贰进制代码,
反汇编和调节和测试的靶子)、.data(初叶化数据块)、.idata(使用的外来函数如动态链接库与公事消息)、.rsrc(存放程序财富),还包蕴此外如.reloc、.edata、.tls、.rdata等。

|  .rdata  00002000   000000F6  00000600  00000200  40000040|

 

《软件漏洞分析本事》笔记

|  .data   00003000   0000018E  00000800  00000200  C0000040|

澳门金沙国际 7

澳门金沙国际 8

VA = FileOffset + ImageBase + VTiguank = 43伍 + 00陆仟00 + C00 = 0040拾3五(虚拟地址)

在PE的文书头中,第三个DWOXC90D Signature,
被定义为了0x00004550h,也正是”PE\0\0″那七个字符。那个标识未有怎么效果。(DOS中针对的地点)。

  (叁).虚拟内部存款和储蓄器地址(Virtual
Address,VA):PE文件中的指令棉被服装入内部存款和储蓄器后的地方。

|  段名称   虚拟地址  虚拟大小  物理地址  物理大小   标识   |

#define IMAGE_DIRECTORY_ENTRY_EXPORT 0              //Export Table
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1        //Import Table              输入表这里比较重要
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
#define IMAGE_DIRECTORY_ENTRY_TLS 9
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
#define IMAGE_DIRECTORY_ENTRY_IAT 12          //IAT (import address table), 这里也很重要
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14

相关文章

发表评论

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

网站地图xml地图