Jak wyświetlić zawartość biblioteki systemu Windows (* .lib)

181

Mam plik binarny - bibliotekę statyczną Windows (* .lib).
Czy istnieje prosty sposób na znalezienie nazw funkcji i ich interfejsu z tej biblioteki?

Coś podobnego do narzędzi emfari elfdump(w systemach Linux)?

Nick Borodulin
źródło
1
Uwaga: wiersz polecenia specyficzny dla platformy .NET jest dostępny w wersjach programu Visual Studio, ale nie w wersji Express. Od: social.msdn.microsoft.com/Forums/en-US/ ...
wysłano

Odpowiedzi:

199

Zakładając, że mówisz o bibliotece statycznej, DUMPBIN /SYMBOLSpokazuje funkcje i obiekty danych w bibliotece. Jeśli mówisz o bibliotece importu ( .libużywanej w odniesieniu do symboli wyeksportowanych z biblioteki DLL), to chcesz DUMPBIN /EXPORTS.

Zwróć uwagę, że w przypadku funkcji połączonych z interfejsem binarnym „C” nadal nie zwraca to wartości, parametrów ani konwencji wywoływania. Ta informacja nie jest w ogóle zakodowana .lib; musisz to wiedzieć z wyprzedzeniem (na przykład poprzez prototypy w plikach nagłówkowych), aby je poprawnie wywołać.

W przypadku funkcji połączonych z interfejsem binarnym C ++, konwencja wywoływania i argumenty są kodowane w wyeksportowanej nazwie funkcji (nazywanej również „zniekształcaniem nazw”). DUMPBIN /SYMBOLSpokaże zarówno „zniekształconą” nazwę funkcji, jak i zdekodowany zestaw parametrów.

Tim Lesher
źródło
6
Zarówno / SYMBOLS, jak i / EXPORTS nie działają obecnie. Muszę użyć / ALL z potokiem | more, aby zobaczyć wszystkie funkcje w pliku .lib.
user5280911
100

Otwórz wizualną konsolę poleceń (wiersz polecenia programu Visual Studio)

dumpbin /ARCHIVEMEMBERS openssl.x86.lib

lub

lib /LIST openssl.x86.lib

lub po prostu otwórz go za pomocą 7-zip :) jest to archiwum AR

Tanguy
źródło
19
Fajna sztuczka z 7-zipem, wydaje się, że są tam dwa pliki .txt, co one oznaczają?
Damian
21

Chciałem narzędzia jak ar t libfile.aw unixie.
Odpowiednik systemu Windows to lib.exe /list libfile.lib.

lgwest
źródło
4
Tak, lib (tylko) pokaże pliki obj; nie pokaże funkcji i danych w plikach obj.
user34660
14

"dumpbin -exports" działa dla dll, ale czasami może nie działać dla lib. Dla lib możemy użyć "dumpbin -linkermember" lub po prostu "dumpbin -linkermember: 1".

Szczery
źródło
13

DUMPBIN / EXPORTS Otrzyma większość tych informacji, a naciśnięcie MSDN dostanie resztę.

Uzyskaj jeden z pakietów Visual Studio; C ++

jim
źródło
3

1) Otwórz wiersz polecenia dewelopera dla VS 2017 (lub dowolną wersję, którą masz na swoim komputerze) (powinien znajdować się w: Menu Start -> Wszystkie programy -> Visual Studio 2017 (lub dowolna wersja, którą masz na swoim komputerze) -> Visual Studio Tools -> Developer Command Prompt for VS 2017.

2) Wpisz następujące polecenie:

dumpbin /EXPORTS my_lib_name.lib

user3292568
źródło
2

Jak widać w innych odpowiedziach, musisz otworzyć wiersz polecenia dla deweloperów oferowany w Twojej wersji programu Visual Studio, aby mieć dumpbin.exena ścieżce wykonywania. W przeciwnym razie możesz ręcznie ustawić niezbędne zmienne środowiskowe.

dumpbin /EXPORTS yourlibrary.libzwykle pokaże tylko małą listę symboli. W wielu przypadkach nie pokazuje funkcji eksportowanych przez bibliotekę.

dumpbin /SYMBOLS /EXPORTS yourlibrary.libpokaże te symbole, ale także niewiarygodnie dużą liczbę innych symboli. Więc musisz je filtrować, prawdopodobnie za pomocą potoku do findstr(jeśli chcesz narzędzie MS-Windows) lub grep.

Wyszukiwanie Staticsłowa kluczowego za pomocą jednego z tych narzędzi wydaje się być dobrą wskazówką.

Hilton Fernandes
źródło