3

在我的项目中,我需要在运行时加载 DLL,在此之前我没有关于它们的信息。我需要能够用 LoadLibrary 和 GetProcAddress 来枚举函数及其(装饰的)名称(这是对我的要求)。名称可能经过修饰,也可能不经过修饰,显然 GetProcAddress 需要修饰名称(如果有的话)。

有没有合理的方法来做到这一点?

我可以使用 Depends 和其他工具自己提取修饰名称,但这需要在运行时完成。使用UnDecorateSymbolName之类的函数,必须有一种方法可以将我缺少的修饰名称取出。我尝试了 SymEnumSymbols 但未修饰名称。

请注意,我不是在询问调用函数,只是在没有 .DEF 文件的情况下从 DLL 中枚举名称。我在 Visual Studio 2010 上,假设所有 DLL 都将在 Visual Studio 上编译。

4

1 回答 1

2

如果您想在运行时使用 C++ 枚举 DLL 函数,请尝试使用 Matt Pietrek的 PEDUMP(包含代码)。他展示了如何实现此功能。

在输出快照下方,显示了 DLL 的修饰导出函数:

在此处输入图像描述

于 2012-07-31T05:38:50.610 回答