在 Windows 上列出 *.lib 中的函数

Zit*_*rax 4 c++ windows static-libraries

当我运行时,lib /list mylib.lib我看到一些包含的 .obj 文件,但没有关于与此类似的功能的信息:

Path\file1.obj
Path\file2.obj
Path\file3.obj
Run Code Online (Sandbox Code Playgroud)

如果我将 .lib 文件作为存档打开,我可以看到1.txt, ..., n.txt除了目标文件之外还有许多文件。这些 txt 文件似乎包含有关 .obj 文件中函数的信息,格式如下:

:
Path\file1.obj    ?function_name@...
:
Run Code Online (Sandbox Code Playgroud)

因此可以通过这种方式检索一些信息。

但是没有更好的方法来获取函数信息吗?例如使用lib.exedumpbin.exe或其他工具?也是一种更易读/破坏的格式吗?到目前为止,我没有运气找到。

这里有一个相关的问题但它没有讨论如何处理 .lib 文件中包含的目标文件。

Phi*_*hil 7

您需要使用dumpbin. (有关详细信息,请参阅msdn 上的 dumpbin。)

dumpbin /symbols /exports mylib.lib
Run Code Online (Sandbox Code Playgroud)

您也可以使用dumpbin后跟undname。(请参阅undname。)例如:

dumpbin /all /exports mylib.lib > mylib.txt
undname mylib.txt
Run Code Online (Sandbox Code Playgroud)

当然,您需要从 Visual Studio 工具所在的命令提示符执行此操作。我的安装 dumpbin 和 undname 位于:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\dumpbin.EXE
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\undname.EXE
Run Code Online (Sandbox Code Playgroud)

程序菜单中提供了 Visual Studio 命令提示。但我只需打电话就可以得到一个

"%VS120COMNTOOLS%..\..\vc\vcvarsall" amd64
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 3

GNUnm可以做你想做的事,只要你不使用/LTCG.

$ nm ssleay32MT.lib 
tmp32/tls_srp.obj:
[...]
00000000 R ??_C@_0BA@IKHGPLLJ@?4?2ssl?2tls_srp?4c?$AA@
         U @__security_check_cookie@4
00e0797d a @comp.id
80000191 a @feat.00
         U ___security_cookie
         U __chkstk
         U _BN_bin2bn
         U _BN_bn2bin
         U _BN_clear_free
         U _BN_copy
         U _BN_dup
         U _BN_free
         U _BN_num_bits
         U _BN_ucmp
         U _BUF_strdup
         U _CRYPTO_free
         U _CRYPTO_malloc
         U _ERR_put_error
         U _OPENSSL_cleanse
         U _RAND_bytes
         U _SRP_Calc_A
00000000 T _SRP_Calc_A_param
         U _SRP_Calc_B
         U _SRP_Calc_client_key
         U _SRP_Calc_server_key
         U _SRP_Calc_u
         U _SRP_Calc_x
         U _SRP_check_known_gN_param
         U _SRP_create_verifier_BN
00000000 T _SRP_generate_client_master_secret
00000000 T _SRP_generate_server_master_secret
[...]
Run Code Online (Sandbox Code Playgroud)