我发现了类似的问题,但没有找到我正在寻找的答案。所以这里是:
对于原生 Win32 dll,是否有 Win32 API 来枚举其导出函数名称?
最佳答案
dumpbin/exports
几乎是您想要的,但这是一个开发工具,而不是 Win32 API。
LoadLibraryEx
DONT_RESOLVE_DLL_REFERENCES
被强烈警告不要使用,但恰好对这种特殊情况很有用——它完成了将 DLL 映射到内存的繁重工作(但您实际上不需要或不想使用library),这使您可以轻松阅读标题:LoadLibraryEx
返回的模块句柄正指向它。
#include <winnt.h>
HMODULE lib = LoadLibraryEx("library.dll", NULL, DONT_RESOLVE_DLL_REFERENCES);
assert(((PIMAGE_DOS_HEADER)lib)->e_magic == IMAGE_DOS_SIGNATURE);
PIMAGE_NT_HEADERS header = (PIMAGE_NT_HEADERS)((BYTE *)lib + ((PIMAGE_DOS_HEADER)lib)->e_lfanew);
assert(header->Signature == IMAGE_NT_SIGNATURE);
assert(header->OptionalHeader.NumberOfRvaAndSizes > 0);
PIMAGE_EXPORT_DIRECTORY exports = (PIMAGE_EXPORT_DIRECTORY)((BYTE *)lib + header->
OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
assert(exports->AddressOfNames != 0);
BYTE** names = (BYTE**)((int)lib + exports->AddressOfNames);
for (int i = 0; i < exports->NumberOfNames; i++)
printf("Export: %s\n", (BYTE *)lib + (int)names[i]);
完全未经测试,但我认为它或多或少是正确的。 (著名的遗言。)
关于c++ - Win32 API 枚举 dll 导出函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1128150/