Loading... 源程序如下: ``` #include<windows.h> #include<tchar.h> int main(void) { MessageBox(NULL,_T("Hello World"),_T("对话框"),MB_OK); return 0; } ``` 编译为hw.exe,以此程序来学习pe结构中导出表的相关知识。 导出表: ![image.png](http://47.117.131.13/usr/uploads/2021/08/156258583.png) 在文件中定位导出表, SIZE = 0x73B8 ,FOA=0xA0720: ![image.png](http://47.117.131.13/usr/uploads/2021/08/1974072490.png) 导入表结构如下: ![image.png](http://47.117.131.13/usr/uploads/2021/08/1766314971.png) 导入表的IMAGE_IMPORT_DIRECTORY个数与调用的动态链接库个数相等,而导出表的IMAGE_EXPORT_DESCRIPTOR只有一个。各字段解释如下: - IMAGE_EXPORT_DIRECTORY.**Name**:双字,RVA,指向了一个以“\0”结尾的字符串,字符串记录了导出表所在的文件的最初文件名; - IMAGE_EXPORT_DESCRIPTOR.**NumberOfFunctions**:双字,该字段定义了文件中导出函数的总个数; - IMAGE_EXPORT_DIRECTORY:**NumberOfNames**:双字,在导出表中,有些函数是定义名字的,有些函数是没有定义名字的。该字段记录了所有定义名字函数的个数; - IMAGE_EXPORT_DESCRIPTOR.**AddressOfFunctions**:双字,该指针指向了全部导出函数的入口地址的起始。从入口日志开始为双字数组,数组的个数由IMAGE_EXPORT_DIRECTORY.NumberOfFunctions决定; - IMAGE_EXPORT_DIRCTORY.**nBase**:双字。导出函数编号的起始值。DLL中的第一个导出函数并不是从0开始的,某导出函数的编号等于从AddressOfFunctions开始的顺序号加上这个值,大致示意图如下: ![image.png](http://47.117.131.13/usr/uploads/2021/08/3784582620.png) 如图所示,Fun1的函数编号为nBase+0 = 200h,Fun2的函数编号为nBase+1 = 201h,以此类推。 * IMAGE_EXPORT_DIRECTORY.**AddressOfNames**:双字。该值为一个指针。该指针指向的位置是一连串的双字值,这些双字值均指向了对应的定义了函数名的函数的字符串地址。这一连串的双字个数为NumberOfNames。 * IMAGE_EXPORT_DIRECTORY.**AddressOfNameOrdinals**:双字。该值也是一个指针,与AddressOfNames是一一对应关系(注意,是一一对应),所不同的是,AddressOfNames指向的是字符串的指针数组,而AddressOfNameOrdinals则指向了该函数在AddressOfFunctions中的索引值。 ![image.png](http://47.117.131.13/usr/uploads/2021/08/2301661674.png) **实例讲解:** ![image.png](http://47.117.131.13/usr/uploads/2021/08/227579949.png) AddressOfFunctions: RVA=000A1B48h,FOA=000A0748h 定位到文件中: ![image.png](http://47.117.131.13/usr/uploads/2021/08/3036665897.png) ![image.png](http://47.117.131.13/usr/uploads/2021/08/3313192708.png) AddressOfNames:RVA = 000A2E44,FOA=A1AEE ——> RVA = 0A45F3 ,FOA=A31F3 AddressOfNameOrdinals:指向输出函数序号的RVA ![image.png](http://47.117.131.13/usr/uploads/2021/08/1744952708.png) ![image.png](http://47.117.131.13/usr/uploads/2021/08/275547432.png) ![image.png](http://47.117.131.13/usr/uploads/2021/08/158365929.png) 参考:《Windows.PE权威指南》 最后修改:2021 年 08 月 06 日 10 : 12 AM © 允许规范转载