在C ++中枚举装饰的DLL函数

时间:2012-07-30 18:55:41

标签: c++ dll

在我的项目中,我需要在运行时加载DLL,之前我没有关于它们的信息。我需要能够使用LoadLibrary和GetProcAddress调用它们(装饰)名称的函数进行枚举(这是强加于我的要求)。名称可能会也可能不会被修饰,显然GetProcAddress需要装饰名称(如果有名称)。

有合理的方法吗?

我可以使用Depends和其他工具自行提取装饰名称,但这需要在运行时完成。使用像UnDecorateSymbolName这样的函数,必须有一种方法来获取我缺少的装饰名称。我试过SymEnumSymbols,但那些名字没有修饰。

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

1 个答案:

答案 0 :(得分:2)

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

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

enter image description here