在我的项目中,我需要在运行时加载DLL,在此之前我没有关于它们的信息。我需要能够枚举函数及其(修饰的)名称,以便使用LoadLibrary和GetProcAddress调用(这是对我的一个要求)。名称可能被修饰,也可能不被修饰,显然,如果GetProcAddress有修饰的名称,它需要修饰的名称。
有没有一种合理的方法来做到这一点?
我可以使用Depends和其他工具自己提取修饰名称,但这需要在运行时完成。有了像UnDecorateSymbolName这样的函数,一定有办法去掉我遗漏的修饰名称。我试过SymEnumSymbols,但是名字没有修饰。
请注意,我并不是在询问如何调用函数,只是在没有.DEF文件的情况下枚举DLL中的名称。我使用的是Visual Studio2010,假设所有的all都将在Visual Studio上编译。
发布于 2012-07-31 13:38:51
如果您想在运行时使用C++枚举DLL函数,那么可以尝试使用Matt Pietrek的PEDUMP (包含代码)。他展示了如何实现此功能。
下面是输出的快照,显示了DLL的经过修饰的导出函数:

https://stackoverflow.com/questions/11727796
复制相似问题