如何获得dll中的函数、接口和字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得dll中的函数、接口和字符串?相关的知识,希望对你有一定的参考价值。

有一个别人编写的dll文件,如何能得知里面有什么函数和字符串常量?获得函数名称和参数类型就好了。
我曾经用一个工具反编译dll,但得出一堆系统自带的dll(user32.dll等)。有一大堆系统函数,但找不到他自己写的函数。

参考技术A 使用VC6带的DEPENDS.EXE,打开你的DLL文件,就可以看见带的DLL导出的函数或变量,但你不能看见函数的参数,没有任何工具能看见DLL带的参数 参考技术B 你可以看到所有dll里的函数名,但你不可能看到函数的内容.要反编译,除非你懂机器码.本回答被提问者采纳 参考技术C 都让你知道那些卖dll的还怎么活呀。 参考技术D 等看是否有高人。 第5个回答  2008-01-18 用.net的 dumpbin 工具查看

如何调试 DLL 中的代码

【中文标题】如何调试 DLL 中的代码【英文标题】:How to debug the code inside the DLL 【发布时间】:2012-02-27 08:48:12 【问题描述】:

我有一个 C# 程序,我从中调用 C++ 中的一些函数/变量。 C++ 程序本身运行良好,并经过检查。但是,当我构建这个 DLL 并将其用于 C# 时,接口代码中存在一些错误,阻止我在 C# 中获得正确的结果。

很可能,导出变量/导出函数给出的结果有一些错误,我想检查一下。

我的主要问题是:我如何调试这个 DLL,比如设置断点等,然后像我们对任何其他程序所做的那样查看结果?

【问题讨论】:

【参考方案1】:

假设您有本机 (C++) DLL 的源代码和调试符号,您可以在托管 (C#) EXE 项目的“调试”选项卡上选中“启用非托管代码调试”选项,然后设置断点,像往常一样检查 C++ 代码中的变量等。您可以将 C++ 项目添加到解决方案中,或者只打开一个 C++ 源代码文件并在其中设置断点。

【讨论】:

我的 C++ 项目在解决方案中,并且设置了所有断点。我在 C# exe 项目的调试选项卡下检查了Enable Unmanaged code debugging option,但是当我开始调试时,C++ 中的断点被禁用(悬停在它们上时,工具提示消息是:The breakpoint will not be hit. No symbols have been loaded for this document【参考方案2】:

如果你想调试DLL,你应该在你的C++环境中工作,在你的c++代码中放置断点,但是使用c#生成的可执行文件。

【讨论】:

【参考方案3】:

调试这种场景的最佳方法是使用 Visual Studio 混合模式调试(通过 devenv /debugexe yourapp.name.exe 命令)或使用 Windbg + SOS 扩展(更深入的学习曲线,但这会显示更多信息,例如您在本机和托管代码中键入大小) 要了解如何使用 Windbg + SOS,请参阅 Mario Hewardt 的 Advanced .NET Debugging

请注意,这类问题通常是由 1) 错误选择了与 C++ API 一起使用的 C# 数据类型 2) 错误指定/未指定的函数调用约定 http://blogs.msdn.com/b/adam_nathan/archive/2003/05/21/56690.aspx

【讨论】:

以上是关于如何获得dll中的函数、接口和字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MSVC 中的 libsndfile-1.dll 访问函数?

我用VB调用dll函数,该函数的输出参数为byte* buffer,如何把缓冲数据读出来,急啊!谢谢了

C++ 中的 DLL 导出调用,带有“::”字符串名称

如何查看DLL中的函数信息

我是Delphi新手,现请教一个调用DLL的问题.

求助python调用dll函数里,关于数据指针和长度应该如何获得呢?