从 dll 获取库接口

Posted

技术标签:

【中文标题】从 dll 获取库接口【英文标题】:Get library interface from dll 【发布时间】:2012-07-10 18:45:43 【问题描述】:

我有一个已编译的 dll 库,但我没有关于它的文档。有一种方法可以获取 dll 的公共接口(至少是函数名、参数编号和类型)。

谢谢

【问题讨论】:

要检索此信息,请使用 PeStudio (winitor.com) 有了 Dependency Walker,我发现这是一个 C 库……没有了。 【参考方案1】:

你必须反编译它并分析每个函数,它的调用约定,参数计数,参数含义(除非它带有一些 PDB,但我怀疑它),我以前做过这样的事情,这是复杂的工作,但可以做到。

【讨论】:

我正在尝试使用 IDA 并反编译库...但是这似乎是一项艰巨的工作,我解决了参数计数和类型,但意义并不那么容易。 您需要调试应用程序并在所选函数处设置断点以查看调用来自何处(并对应用程序本身进行反向工程)以及参数是什么,IDA 中的死列表很有用,但您需要运行它(除非参数在 IDA 的应用程序转储中清晰可见)。在 IDA 或 OllyDbg v2 中使用调试器。如果您需要更多帮助,请私信我(您可以在我的个人资料页面中找到我的 MSN)。【参考方案2】:

为了检索动态链接库导出的公共符号(函数和变量),可以使用众所周知的dependency walker。参数和类型仅在相关的 PDB 文件可用时才可用(这似乎不是您的情况)。

【讨论】:

当然,处理托管库或非托管库时情况有所不同。我想你的案子是无人管理的。 我得到了函数名称,但我仍然没有关于它们的参数的信息......唯一的选择是对那个 dll 进行反向工程? 如果您有相关的符号文件(PDB 文件 - msdn.microsoft.com/en-us/library/yd4f8bd1(v=vs.90).aspx),您可以在调试器中加载您的库并检索这些详细信息。 您也可以使用像这样的 PDB 浏览器 (codeproject.com/Articles/37456/…) 浏览 PDB 我没有任何其他文件,只有一个示例 exe(使用该库)和 dll。【参考方案3】:

如果是 COM 库,您可以使用 Visual Studio 附带的 OLEViewer 查看 DLL 的 TypeLib。这将为您提供所需的信息。

【讨论】:

以上是关于从 dll 获取库接口的主要内容,如果未能解决你的问题,请参考以下文章

创建 C++ Dll,并从 C# 调用它

Electron引用外部动态库(.dll或.so)接口

Electron引用外部动态库(.dll或.so)接口

Electron引用外部动态库(.dll或.so)接口

MFC规则动态库

C# 获取DLL中需要的接口类