首页 > PE文件格式 > PE文件格式解析(五)——导出表的解析

PE文件格式解析(五)——导出表的解析

昨天看了一下PE感染的实现,发现还是存在很多疑问,所以决定继续写那个PE工具。这里要实现导出表的解析。
输出表一般存在于Dll之中,在Winnt.h中的定义如下:

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;

Characteristics、TimeDateStamp、MajorVersion、MinorVersion这些都不重要,忽略。Name是一个RVA,他指向这个Dll的ASCII名称,而且,如果一个Dll被编译出来之后名字为HelloWorld.dll,而你把它改成Hello.dll,在输出表中他仍然是HelloWorld.dll。

Base为Dll中导出函数的一个基值,如果AddressOfFuntions中第N个元素的导出序号为N+Base。

NumberOfFunctions说明DLL导出的函数的个数。

NumberOfNames说明DLL导出函数中以名字导出的个数。

AddressOfFunctions是一个RVA,他指向包含导出函数入口地址的一个双字数组,数组中的每一项也是RVA。

AddressOfNames是一个RVA,他指向包含以名字导出的导出函数入口地址的一个双字数组,数组中的每一项也是RVA。

AddressOfNameOrdinals是一个RVA,他指向一个字类型的数组,数组的项目与AddressOfNames中的项目一一对应,项目的值表示导出序号。这样就可以知道以名字导出的函数的序号了。

输出表结构说明示意图
下面是我写的解析输出表的部分
输出表效果


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> PE文件格式解析(五)——导出表的解析
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: PE文件格式 标签: , , ,
  1. 本文目前尚无任何评论.