如何查看 Windows 库 (*.lib) 的内容
Posted
技术标签:
【中文标题】如何查看 Windows 库 (*.lib) 的内容【英文标题】:How to See the Contents of Windows library (*.lib) 【发布时间】:2010-09-23 05:56:12 【问题描述】:我有一个二进制文件 - Windows 静态库 (*.lib)。 有没有一种简单的方法可以从该库中找出函数的名称及其接口?
类似于emfar
和elfdump
的实用程序(在Linux 系统上)?
【问题讨论】:
注意:特定于 .NET 的命令提示符随 Visual Studio 版本提供,但不随 Express 版本提供。来自:social.msdn.microsoft.com/Forums/en-US/… 【参考方案1】:假设您在谈论静态库,DUMPBIN /SYMBOLS
显示库中的函数和数据对象。如果您在谈论导入库(.lib
用于引用从 DLL 导出的符号),那么您需要 DUMPBIN /EXPORTS
。
请注意,对于与“C”二进制接口链接的函数,这仍然不会让您返回值、参数或调用约定。该信息根本没有编码在.lib
中;您必须提前知道(例如通过头文件中的原型)才能正确调用它们。
对于与 C++ 二进制接口链接的函数,调用约定和参数编码在函数的导出名称中(也称为“名称修改”)。 DUMPBIN /SYMBOLS
将向您显示“损坏的”函数名称以及解码的参数集。
【讨论】:
现在 /SYMBOLS 和 /EXPORTS 都不起作用。我必须使用带有 |more 管道的 /ALL 来查看 .lib 文件中的所有函数。 @user5280911dumpbin /symbols
今天在 Win 10 上使用 VS 2019 开发人员命令提示符在静态库 .lib
文件上为我工作得很好,为什么你说这些天它不起作用?跨度>
您可以使用/OUT:filename
将输出导出到文件
什么是 DUMPBIN ?它在哪里?【参考方案2】:
打开 Visual Studio 命令提示符
dumpbin /ARCHIVEMEMBERS openssl.x86.lib
或
lib /LIST openssl.x86.lib
或用 7-zip 打开它 :) 它是一个 AR 存档
【讨论】:
酷炫的 7-zip 技巧似乎有两个 .txt 文件,它们是什么意思? 这些都只是列出了 DLL 名称的负载。dumpbin /exports
列出了实际的符号。【参考方案3】:
我想要一个类似ar t libfile.a
in unix 的工具。
Windows 等效项是lib.exe /list libfile.lib
。
【讨论】:
是的 lib 将(仅)显示 obj 文件;它不会显示 obj 文件中的函数和数据。【参考方案4】:"dumpbin -exports" 适用于 dll,但有时可能不适用于 lib。对于 lib,我们可以使用“dumpbin -linkermember”或仅使用“dumpbin -linkermember:1”。
【讨论】:
【参考方案5】:LIB.EXE 是 VS 的图书管理员
http://msdn.microsoft.com/en-us/library/7ykb2k5f(VS.80).aspx
(类似于 Unix 上的 libtool)
【讨论】:
【参考方案6】:DUMPBIN /EXPORTS 将获得大部分信息,而点击 MSDN 将获得其余信息。
获取 Visual Studio 软件包之一; C++
【讨论】:
【参考方案7】:1) 打开 VS 2017(或您机器上的任何版本)的开发人员命令提示符(它应位于:开始菜单 --> 所有程序 --> Visual Studio 2017(或您拥有的任何版本)您的机器)--> Visual Studio 工具 --> VS 2017 的开发人员命令提示符。
2) 输入以下命令:
dumpbin /EXPORTS my_lib_name.lib
【讨论】:
【参考方案8】:就像在其他答案中看到的那样,您必须打开您的 Visual Studio 版本中提供的开发人员命令提示符,以便在您的执行路径中包含 dumpbin.exe
。否则,您可以手动设置必要的环境变量。
dumpbin /EXPORTS yourlibrary.lib
通常只会显示一小部分符号。在许多情况下,它不会显示库导出的函数。
dumpbin /SYMBOLS /EXPORTS yourlibrary.lib
会显示这些符号,但也会显示大量其他符号。因此,您必须过滤它们,可能使用指向findstr
(如果您想要MS-Windows 工具)或grep
的管道。
使用这些工具之一搜索 Static
关键字似乎是一个很好的提示。
【讨论】:
以上是关于如何查看 Windows 库 (*.lib) 的内容的主要内容,如果未能解决你的问题,请参考以下文章