Как просмотреть содержимое библиотеки Windows (* .lib)

181

У меня есть двоичный файл - статическая библиотека Windows (* .lib).
Есть ли простой способ узнать имена функций и их интерфейс из этой библиотеки?

Нечто подобное emfarи elfdumpутилиты (в системах Linux)?

Ник Бородулин
источник
1
Примечание. Командная строка, специфичная для .NET, поставляется с выпусками Visual Studio, но не с выпуском Express. От: social.msdn.microsoft.com/Forums/en-US/…
isgoed

Ответы:

199

Предполагая, что вы говорите о статической библиотеке, DUMPBIN /SYMBOLSпоказывает функции и объекты данных в библиотеке. Если вы говорите о библиотеке импорта ( .libиспользуется для обозначения символов, экспортируемых из DLL), то вы хотите DUMPBIN /EXPORTS.

Обратите внимание, что для функций, связанных с двоичным интерфейсом «C», это все равно не даст вам возвращаемых значений, параметров или соглашения о вызовах. Эта информация вообще не закодирована .lib; Вы должны знать это заранее (например, через прототипы в заголовочных файлах), чтобы правильно их вызывать.

Для функций, связанных с двоичным интерфейсом C ++, соглашение о вызовах и аргументы кодируются в экспортированном имени функции (также называемом «искажение имени»). DUMPBIN /SYMBOLSпокажет вам как «искаженное» имя функции, так и декодированный набор параметров.

Тим Лешер
источник
6
И / SYMBOLS, и / EXPORTS в настоящее время не работают. Я должен использовать / ALL с | больше канала, чтобы увидеть все функции в файле .lib.
user5280911
100

Откройте визуальную командную консоль (командная строка Visual Studio)

dumpbin /ARCHIVEMEMBERS openssl.x86.lib

или

lib /LIST openssl.x86.lib

или просто откройте его с помощью 7-zip :) его архив AR

Танги
источник
19
Классный трюк с 7-zip, кажется, там два файла .txt, что они значат?
Дамиан
21

Я хотел инструмент, как ar t libfile.aв Unix.
Окна эквивалентны lib.exe /list libfile.lib.

lgwest
источник
4
Да lib будет (только) показывать файлы obj; он не будет отображать функции и данные в файлах obj.
user34660 22.04.16
14

"dumpbin -exports" работает для dll, но иногда может не работать для lib. Для lib мы можем использовать «dumpbin -linkermember» или просто «dumpbin -linkermember: 1».

Фрэнк
источник
13

DUMPBIN / EXPORTS получит большую часть этой информации, а остальное получит MSDN.

Получить один из пакетов Visual Studio; C ++

Джим
источник
3

1) Откройте Командную строку разработчика для VS 2017 (или любой другой версии на вашем компьютере) (она должна находиться в: меню Пуск -> Все программы -> Visual Studio 2017 (или любой другой версии на вашем компьютере) -> Инструменты Visual Studio -> Командная строка разработчика для VS 2017.

2) Введите следующую команду:

dumpbin /EXPORTS my_lib_name.lib

user3292568
источник
2

Как и в других ответах, вам нужно будет открыть командную строку разработчика, предлагаемую в вашей версии Visual Studio, для dumpbin.exeуказания пути выполнения. В противном случае вы можете установить необходимые переменные среды вручную.

dumpbin /EXPORTS yourlibrary.libбудет обычно показывать только крошечный список символов. Во многих случаях он не отображает функции, которые экспортирует библиотека.

dumpbin /SYMBOLS /EXPORTS yourlibrary.libпокажет эти символы, а также невероятно огромное количество других символов. Таким образом, вы должны отфильтровать их, возможно, с помощью канала findstr(если вам нужен инструмент MS-Windows), или grep.

Поиск Staticключевого слова с помощью одного из этих инструментов, кажется, хороший совет.

Хилтон Фернандес
источник