PE格式详解(五)

 

         上次文章因为实在太长,所以不得不把这么简单的一点内容单独成文。回顾一下,上次先说到PE header,然后说到其中的成员Optional header,它的最后一个结构成员DataDirectory,是一个含有16IMAGE_DATA_DIRECTORY类型元素的数组,每一个元素都指向PE文件内的一个很重要的数据结构。

    首先列出IMAGE_DATA_DIRECTORY结构:(简单的结构就不注释了)

typedef struct _IMAGE_DATA_DIRECTORY {

    DWORD VirtualAddress;

    DWORD Size;

} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;

    VirtualAddress。是所指向的数据结构的虚拟地址。

    Size。这个数据结构的大小。

    这一个结构占8个字节,16项一共占128字节。

    另外序号与目录的对应关系在winnt.h中定义如下:

#define IMAGE_DIRECTORY_ENTRY_EXPORT    0

#define IMAGE_DIRECTORY_ENTRY_IMPORT    1

#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_COPYRIGHT 7

#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

#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT  13

#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR    14

    最后15是预留位置。

    下图便是testPE.exeDataDirectory,我们选其中几项来看看。

                PICTURE MISSING

    图中其实很整齐地帮我们划分了每一个目录表项,每一行有明显分开的两组数据,每一组长即为8字节,也就是一个表项,这样看起来就方便很多。

    第一个表项,全零,由于对应的IMAGE_DIRECTORY_ENTRY_EXPORT,意味着testPE.exe没有DLL输出表(Export Table)

    第二个是输入表(Import Table),显然不为0(不然还叫Windows程序啊),推断出VirtualAddress = 00 01 80 00Size = 00 00 00 3C,有空自己挑个EXE去看一下去,以后我们会再遇到的,现在跳过。

    其实每一个表项都有挺实在的意思,看最后一个单词就都明白了。到这,PE header部分就全部结束了。下次讲的是区段表(Section Table)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值