一、数据目录概述
1.数据目录的引入
- 我们当时解析可选PE头时,有一个字段为
DWORD NumberOfRvaAndSizes,NumberOfRvaAndSizes的值为多少,说明下面的_IMAGE_DATA_DIRECTORY DataDirectory[16];这种类型的结构体就有多少个 - Win32下,可执行文件的PE结构分节:有代码节,数据节等等节,但是不能理解成这些节中只有程序本身的数据等,编译器也会替我们往每一个节中加很多重要的内容:
- 比如一个程序还会使用一些系统提供的函数,那么编译器就需要添加这些函数的相关信息,告诉程序需要去哪里找到这个函数并进行系统调用;
- 一个程序不仅可以使用别的函数,也可以提供函数给别的程序使用,所以此时编译器会添加此程序中供别人使用的函数相关信息
- 编译器添加的内容为什么重要?因为这些信息包含了诸如:PE程序的图标在哪里,用到了哪些系统提供的函数,为其他的程序提供哪些函数等,编译器不添加,程序就找不到这些东西的地址
2.数据目录的作用
- 综上所述:一个PE文件中,除了有程序员自己添加的内容(程序自身的数据),编译器也会向当中添加很多内容,编译器添加的内容有很多种类,各有各的目的和使用途径,那么这么多数据和内容肯定需要一个表格记录–数据目录,而且要编译器在添加时要遵循某些规则,以至于程序在运行时,会很方便的找到需要的信息和数据在哪里
- 所以可以这么理解:这==16个数据目录分别记录了编译器往PE文件中写的16种不同的信息存在哪里==
3.数据目录有哪些
- 可选PE头最后一个成员,就是数据目录,一共有16个
- 分别是:导出表的数据目录、导入表的数据目录、资源表的数据目录、异常信息表的数据目录、安全证书表的数据目录、重定位表的数据目录、调试信息表的数据目录、版权所有表的数据目录、全局指针表的数据目录、TLS表的数据目录、加载配置表的数据目录、绑定导入表的数据目录、IAT表的数据目录、延迟导入表的数据目录、COM信息表的数据目录、最后一个保留未使用
- 其中比较重要的就是导出表、导入表、重定位表、IAT表这四张表的数据目录,这四张表和程序的运行有直接关系,不管是加壳、脱壳、破解、病毒或反病毒,这些都是基础中的基础
4.数据目录结构
-
结构如下:
struct _IMAGE_DATA_DIRECTORY{ DWORD VirtualAddress; //内存偏移,必须有 DWORD Size; //大小,破坏了也不会影响程序运行 }; -
16个数据目录的大小一样,都是8字节,一行16字节,所以一共占8行

本文详细介绍了PE文件中的数据目录,包括其作用、内容和结构。数据目录记录了编译器添加到PE文件中的各种信息,如导出表、导入表、资源表等,对于程序运行、加壳、脱壳、破解和病毒分析至关重要。文章还提供了数据目录结构的代码示例,并阐述了如何通过数据目录找到相应表的实际位置。
最低0.47元/天 解锁文章
417

被折叠的 条评论
为什么被折叠?



