PE总结8---PE文件结构之导出表 (IMAGE_EXPORT_DIRECTORY)

导出表中导出的是供其他PE文件使用的函数、变量或者类的行为。

导出表记载着动态链接库的一些导出信息。通过导出表,DLL 文件可以向系统提供导出函数的名称、序号和入口地址等信息,比便Windows 加载器通过这些信息来完成动态连接的整个过程。   

导出表由3个部分构成:  名称表,   函数表,   序号表。   名称表和序号表就是索引,引导调用者找到真正的函数表。   函数表中保存着被导出函数的地址信息

   导出表在内存中的顺序是按照输出名称来确定的。

    IMAGE_EXPORT_DIRECTORY结构:

typedef struct _IMAGE_EXPORT_DIRECTORY {
	DWORD Characteristics;			//保留 总是定义为0
	DWORD TimeDateStamp;			//文件生成时间
	WORD  MajorVersion;				//主版本号 一般不赋值
	WORD  MinorVersion;				//次版本号 一般不赋值
	DWORD Name;						//模块的真实名称
	DWORD Base;						//索引基数 加上序数就是函数地址数组的索引值
	DWORD NumberOfFunctions;		//地址表中个数
	DWORD NumberOfNames;			//名称表的个数
	DWORD AddressOfFunctions;		//输出函数地址的RVA
	DWORD AddressOfNames;			//输出函数名字的RVA
	DWORD AddressOfNameOrdinals;	//输出函数序号的RVA
} IMAGE_EXPORT_DIRECTORYM, *pIMAGE_EXPORT_DIRECTORY; 

如果在010Editor中的信息如下:

PE总结8---PE文件结构之导出表 (IMAGE_EXPORT_DIRECTORY)_第1张图片

1、通过上图我们可以得出,导出表的RVA是 000240D0h ,Size是 00000178h。

2、我们借助LordPE可以确定在哪个区段表中, 因为导出表的RVA是000240D0h 是大于00020000h 但是小于00025000h,所以可以得到在.rdata区段表中。 

PE总结8---PE文件结构之导出表 (IMAGE_EXPORT_DIRECTORY)_第2张图片

3、计算导出表在文件中的偏移
      文件偏移 = RVA - VOffset + ROffset
                       = 000240D0h - 00020000 + 0000EE00
                       = 00012ED0

4、在010Editor中使用快捷键ctrl+G ->输入文件偏移地址 00012ED0 ----取40个字节:

PE总结8---PE文件结构之导出表 (IMAGE_EXPORT_DIRECTORY)_第3张图片

5、分别计算出 下面的文件偏移
   Name: 0x0002410C ("MFCLibrary1Dll.dll")       0002410C - 00020000 + 0000EE00 = 12F0C
  AddressOfFunctions: 0x000240F8                       000240F8  - 00020000 + 0000EE00 = 12EF8
 AddressOfNames: 0x00024100                             00024100 - 00020000  + 0000EE00 = 12F00
 AddressOfNameOrdinals: 0x00024108                00024108 - 00020000  + 0000EE00 = 12F08


6、ctrl +g ---》输入12F0C 遇到0结束 MFCLibrary1Dll.dll  (得到Name的值)

7、Ctrl+G 输入下面的在5中的偏移(AddressOfFunctions 的值)

PE总结8---PE文件结构之导出表 (IMAGE_EXPORT_DIRECTORY)_第4张图片

可以得到两个函数地址

 1 011037
 2 011460

----这里得到的是函数的地址的RVA ----再进行转换后 获取到的是函数的内容


AddressOfNames        12F00

PE总结8---PE文件结构之导出表 (IMAGE_EXPORT_DIRECTORY)_第5张图片

 1 02411f      02411f - 20000 + ee00= 12F1F CreateCframe
 2 02412c    02412c- 20000 + ee00= 12F2C GetName


AddressOfNameOrdinals  12F08



你可能感兴趣的:(PE)