我有一个二进制文件--Windows静态库(* .lib) 有没有一种简单的方法可以从该库中找出函数及其接口的名称?
类似于emfar
和elfdump
实用程序(在Linux系统上)?
答案 0 :(得分:175)
假设您正在讨论静态库,DUMPBIN /SYMBOLS
显示库中的函数和数据对象。如果您正在谈论导入库(.lib
用于引用从DLL导出的符号),那么您需要DUMPBIN /EXPORTS
。
请注意,对于与“C”二进制接口链接的函数,这仍然不会返回值,参数或调用约定。该信息根本不在.lib
中编码;你必须提前知道(例如通过头文件中的原型)才能正确调用它们。
对于与C ++二进制接口链接的函数,调用约定和参数在函数的导出名称中编码(也称为“名称修改”)。 DUMPBIN /SYMBOLS
将显示“受损”函数名称以及已解码的参数集。
答案 1 :(得分:76)
打开可视命令控制台(Visual Studio命令提示符)
dumpbin /ARCHIVEMEMBERS openssl.x86.lib
或
lib /LIST openssl.x86.lib
或只需用7-zip :)打开它的AR档案
答案 2 :(得分:20)
我想在unix中使用像ar t libfile.a
这样的工具
等效的窗口是lib.exe /list libfile.lib
。
答案 3 :(得分:13)
答案 4 :(得分:13)
“dumpbin -exports”适用于dll,但有时可能不适用于lib。对于lib,我们可以使用“dumpbin -linkermember”或“dumpbin -linkermember:1”。
答案 5 :(得分:12)
DUMPBIN / EXPORTS将获得大部分信息并点击MSDN将获得其余信息。
获取一个Visual Studio包; C ++
答案 6 :(得分:3)
1)打开VS 2017的开发人员命令提示符(或您机器上的任何版本)(它应位于:开始菜单 - >所有程序 - > Visual Studio 2017(或任何版本的您)在你的机器上) - > Visual Studio工具 - > VS 2017开发人员命令提示符。
2)输入以下命令:
dumpbin /EXPORTS my_lib_name.lib
答案 7 :(得分:0)
就像在其他答案中可以看到的那样,您必须打开Visual Studio版本中提供的Developer Command Prompt,才能在执行路径中使用WITH RECURSIVE files_to_parent AS (
SELECT FileID, Name, ParentID,
1 AS recursion_depth
FROM File
WHERE FileID = file_id
UNION ALL
SELECT F.FileID, F.Name, F.ParentID,
ftp.recursion_depth + 1
FROM files_to_parent ftp
JOIN File F ON F.FileID = FTP.ParentID
)
SELECT Name
FROM files_to_parent
ORDER BY recursion_depth DESC;
。否则,您可以手动设置必要的环境变量。
dumpbin.exe
通常只会显示少量符号。在许多情况下,它不会显示库导出的功能。
dumpbin /EXPORTS yourlibrary.lib
将显示该符号,但还会显示大量其他符号。因此,您必须使用到dumpbin /SYMBOLS /EXPORTS yourlibrary.lib
(如果需要MS-Windows工具)或findstr
的管道来过滤它们。
使用这些工具之一搜索grep
关键字似乎是一个很好的提示。