概述
所有PE文件都可以有导出表,只是大部分情况下,exe不提供导出表而已。
OptionalHeader指向的DataDirectory[]数组一共有16个,每个都是一样的结构:
VirtualAddress 虚拟偏移地址
size 大小
NtHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT ]
,这个数据目录表VirtualAddress指向的就是导出表的地址。
IMAGE_EXPORT_DIRECTORY
typedef struct _IMAGE_EXPORT_DIRECTORY
{
DWORD Characteristics;//未使用,总是定义为0
DWORD TimeDateStamp;//文件生成时间
WORD MajorVersion;//未使用,总是定义为0
WORD MinorVersion;//未使用,总是定义为0
DWORD Name; //模块的真实名称的RVA
DWORD Base; //基数,加上序数就是函数地址数组的索引值
DWORD NumberOfFunctions;//导出函数的总数
DWORD NumberOfNames; //以名称方式导出的函数的总数
DWORD AddressOfFunctions; // RVA from base of image指向输出函数地址的RVA
DWORD AddressOfNames; // RVA from base of image指向输出函数名字的RVA
DWORD AddressOfNameOrdinals; // RVA from base of image向输出函数序号的RVA
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY
评论区