滴水三期:day34.2-数据目录

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

一、数据目录概述

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行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值