215

我有一个二进制文件 - Windows 静态库 (*.lib)。
有没有一种简单的方法可以从该库中找出函数的名称及其接口?

类似于emfarelfdump实用程序的东西(在 Linux 系统上)?

4

8 回答 8

224

假设您在谈论静态库,DUMPBIN /SYMBOLS则显示库中的函数和数据对象。如果您正在谈论导入库(.lib用于引用从 DLL 导出的符号),那么您需要DUMPBIN /EXPORTS.

请注意,对于与“C”二进制接口链接的函数,这仍然不会让您返回值、参数或调用约定。该信息根本没有编码.lib。您必须提前知道(例如通过头文件中的原型)才能正确调用它们。

对于与 C++ 二进制接口链接的函数,调用约定和参数被编码在函数的导出名称中(也称为“名称修改”)。 DUMPBIN /SYMBOLS将向您显示“损坏的”函数名称以及解码的参数集。

于 2008-11-20T14:31:02.167 回答
120

打开 Visual Studio 命令提示符

dumpbin /ARCHIVEMEMBERS openssl.x86.lib

或者

lib /LIST openssl.x86.lib

或者只是用 7-zip 打开它:) 它是一个 AR 存档

于 2014-11-01T13:16:41.323 回答
22

我想要一个像ar t libfile.aunix一样的工具。
Windows 等价物是lib.exe /list libfile.lib.

于 2011-01-20T20:35:36.483 回答
18

“dumpbin -exports”适用于 dll,但有时可能不适用于 lib。对于 lib,我们可以使用“dumpbin -linkermember”或仅使用“dumpbin -linkermember:1”。

于 2017-02-10T20:12:34.393 回答
15

LIB.EXE 是 VS 的图书管理员

http://msdn.microsoft.com/en-us/library/7ykb2k5f(VS.80).aspx

(如 Unix 上的 libtool)

于 2008-11-20T14:16:50.900 回答
14

DUMPBIN /EXPORTS 将获得大部分信息,点击 MSDN 将获得其余信息。

获取 Visual Studio 软件包之一;C++

于 2008-11-20T13:46:02.943 回答
4

1)打开VS 2017(或您机器上的任何版本)的开发人员命令提示符(它应该位于:开始菜单->所有程序-> Visual Studio 2017(或您机器上的任何版本) --> Visual Studio 工具 --> VS 2017 的开发人员命令提示符。

2) 输入以下命令:

dumpbin /EXPORTS my_lib_name.lib

于 2014-02-11T13:54:54.467 回答
3

就像在其他答案中可以看到的那样,您必须打开您的 Visual Studio 版本中提供的开发人员命令提示符才能dumpbin.exe在您的执行路径中使用。否则,您可以手动设置必要的环境变量。

dumpbin /EXPORTS yourlibrary.lib通常只会显示一小部分符号。在许多情况下,它不会显示库导出的函数。

dumpbin /SYMBOLS /EXPORTS yourlibrary.lib将显示这些符号,但也会显示大量其他符号。因此,您必须过滤它们,可能使用管道findstr(如果您想要 MS-Windows 工具)或grep.

使用这些工具之一搜索Static关键字似乎是一个很好的提示。

于 2019-01-31T12:47:38.103 回答