c# - 从非托管库的方法名称中获取参数类型?

标签 c# c++ .net vb.net dll

我问过in this post如何枚举 C++ dll 库的方法,以及 here我找到了解决方案 P/Invoking the dbghelp.dll library。

我的问题是:

使用 dbghelp.dll 获得方法名称后,我是否可以检索它的重载(如果存在)及其参数类型以了解我应该如何在内部调用该方法?

this MSDN urldbghelp.dll 库的函数文档,但我不确定其中一个函数是否可以帮助我。

PS:我对 PE 的了解非常少,这就是为什么我要寻求解决方案 P/调用其他方法,但如果无法使用 dbghelp.dll 我想知道替代方案以及完成任务的步骤。

最佳答案

一般而言,非托管库(例如:从 C++ 编译的 dll)是不可能的。 PE 格式没有办法对这些信息进行逆向工程(这是 dll 和 lib 与 .h 文件一起分发的原因之一)。一些逆向工程工具分析函数的序言并对它们的参数进行猜测和启发,但这只是猜测。对于库中的 C++ 导出函数,可能使用损坏的名称信息可以检索此信息。 VC++ Name Mangling .但这是依赖于编译器实现的信息,可以随时更改任何内容。

在某些仅使用 PE 格式作为其自定义格式容器的托管语言(例如:.NET)的库中(PE 仅运行和调用加载自定义格式的 .NET 运行时),此信息保存有元数据自定义格式的信息。

关于c# - 从非托管库的方法名称中获取参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24783586/

相关文章:

c# - 是否需要在服务器上安装 MS Excel 或 Office 才能在 Web 应用程序中读取 excel 文件?

c++ - 可变参数模板和省略号有什么区别?

c++ - FileCodeModel::AddFunction 在传递 vsCMFunctionConstructor 时生成具有返回类型的函数

c# - DataGridView "Enter"按键事件处理

.net - 创建新 GUI 时,WPF 是不是 Windows 窗体的首选?

c# - EndpointNotFoundException - 404 - 通过 Visual Studio 在 IIS 中通过 HTTPS 托管 WCF 服务

c# - WPF - 在自定义样式中定义窗口图标

c# - DataGridView设置列背景色的方法

c# - 我们可以使用 QT 和 C# 来创建 GUI 吗?

c++ - 为什么boost需要&vector[0]?