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

时间:2015-07-14 15:01:07

标签: c++ windows static-libraries

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

Path\file1.obj
Path\file2.obj
Path\file3.obj

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

:
Path\file1.obj    ?function_name@...
:

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

但是有没有更好的方法来获取功能信息?例如,使用lib.exedumpbin.exe或其他工具?还有一个更易读/解码的格式?到目前为止,我没有找到那个好运。

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

2 个答案:

答案 0 :(得分:4)

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

dumpbin /symbols /exports mylib.lib

您还可以使用dumpbin,然后使用undname。 (参见undname。)例如:

dumpbin /all /exports mylib.lib > mylib.txt
undname mylib.txt

当然,您需要从命令提示符执行此操作,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

程序菜单中提供了Visual Studio命令提示符。但我只需拨打

即可获得一个
"%VS120COMNTOOLS%..\..\vc\vcvarsall" amd64

答案 1 :(得分:1)

GNU nm执行您想要的操作,只要您不使用/LTCG进行编译,就应该使用MSVC对象。

$ 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
[...]