У меня есть бинарный файл - статическая библиотека Windows (*.lib).
Есть ли простой способ узнать имена функций и их интерфейс из этой библиотеки?
Что-то похожее на emfar
и elfdump
(в системах Linux)?
У меня есть бинарный файл - статическая библиотека Windows (*.lib).
Есть ли простой способ узнать имена функций и их интерфейс из этой библиотеки?
Что-то похожее на emfar
и elfdump
(в системах Linux)?
Предполагая, что вы говорите о статической библиотеке, DUMPBIN /SYMBOLS
показывает функции и объекты данных в библиотеке. Если вы говорите о библиотеке импорта (.lib
, используемой для обозначения символов, экспортируемых из DLL), то вы хотите DUMPBIN /EXPORTS
.
Обратите внимание, что для функций, связанных с двоичным интерфейсом "C", это все равно не даст вам вернуть значения, параметры или соглашение о вызове. Эта информация вообще не закодирована в .lib
; вы должны знать это заранее (через прототипы в заголовочных файлах, например), чтобы правильно их называть.
Для функций, связанных с двоичным интерфейсом С++, вызывающее соглашение и аргументы кодируются в экспортированном имени функции (также называемом "mangling name" ). DUMPBIN /SYMBOLS
покажет вам как имя функции "mangled", так и декодированный набор параметров.
Откройте визуальную консоль команд (командная строка Visual Studio)
dumpbin /ARCHIVEMEMBERS openssl.x86.lib
или
lib /LIST openssl.x86.lib
или просто откройте его с помощью 7-zip:) его архив AR
Мне нужен инструмент, например ar t libfile.a
в unix.
Эквивалент Windows lib.exe /list libfile.lib
.
LIB.EXE является библиотекарем для VS
http://msdn.microsoft.com/en-us/library/7ykb2k5f(VS.80).aspx
(например, libtool в Unix)
"dumpbin -exports" работает для dll, но иногда может не работать для lib. Для lib мы можем использовать "dumpbin -linkmember" или просто "dumpbin -linkmember: 1".
DUMPBIN/EXPORTS получит большую часть этой информации, а остальное получит MSDN.
Получить один из пакетов Visual Studio; C++
1) Откройте командную строку разработчика для VS 2017 (или любой другой версии, установленной на вашем компьютере) (она должна находиться в: меню Пуск → Все программы → Visual Studio 2017 (или любой другой версии на вашем компьютере) → Инструменты Visual Studio → Командная строка разработчика для VS 2017.
2) Введите следующую команду:
dumpbin/EXPORTS my_lib_name.lib
Примечание. Командная строка, специфичная для .NET, поставляется с версиями Visual Studio, но не с версией Express.
Как и в других ответах, вам нужно открыть командную строку разработчика, предлагаемую в вашей версии Visual Studio, чтобы в пути выполнения был dumpbin.exe
. В противном случае вы можете установить необходимые переменные среды вручную.
dumpbin/EXPORTS yourlibrary.lib
обычно показывает только небольшой список символов. Во многих случаях он не отображает функции, которые экспортирует библиотека.
dumpbin/SYMBOLS/EXPORTS yourlibrary.lib
покажет эти символы, а также невероятно огромное количество других символов. Итак, вы должны отфильтровать их, возможно, с помощью канала для findstr
(если вам нужен инструмент для MS-Windows) или grep
.
Поиск ключевого слова Static
с помощью одного из этих инструментов кажется хорошим советом.