DEF文件如下所示:
EXPORTS
Inject @12
MyAdd @14
MySub @17
MyMul @11 NONAME
MyDiv @19
g_szInject @15
用调试器加载编译好的dll文件,查看导出信息:
用十六进制编辑器打开dll文件,定位到导出表,可以发现导出的字符串是按ASCII顺序排列的,方便系统折半查找:
typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics; //未使用
DWORD TimeDateStamp; //可忽略
WORD MajorVersion; //未使用
WORD MinorVersion; //未使用
DWORD Name; //指向文件名
DWORD Base; //导出项起始序号
DWORD NumberOfFunctions; //导出项个数,不一定是函数,全局变量等也可以
DWORD NumberOfNames; //带名称的导出项个数
DWORD AddressOfFunctions; //地址表的RVA
DWORD AddressOfNames; //名称表的RVA
DWORD AddressOfNameOrdinals; //名称序号表的RVA,索引值是2字节的word,代表在AddressOfFunctions中的索引
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
通过序号查询函数,例如GetProcAddress(hModule, 14)
通过名称查询函数,例如GetProcAddress(hModule, “MyAdd”)
原文:https://www.cnblogs.com/Nutshelln/p/13922583.html