Anzeigen des Inhalts der Windows-Bibliothek (* .lib)

179

Ich habe eine Binärdatei - Windows statische Bibliothek (* .lib).
Gibt es eine einfache Möglichkeit, Namen der Funktionen und ihrer Schnittstelle aus dieser Bibliothek herauszufinden?

Ähnliches emfarund elfdumpDienstprogramme (auf Linux-Systemen)?

Nick Borodulin
quelle
1
Hinweis: Die für .NET spezifische Eingabeaufforderung wird mit den Visual Studio-Editionen geliefert, nicht jedoch mit der Express-Edition. Von: social.msdn.microsoft.com/Forums/en-US/…
isgoed

Antworten:

198

Angenommen, Sie sprechen von einer statischen Bibliothek, DUMPBIN /SYMBOLSwerden die Funktionen und Datenobjekte in der Bibliothek angezeigt. Wenn Sie über eine Importbibliothek sprechen (eine .lib, die auf Symbole verweist, die aus einer DLL exportiert wurden), möchten Sie DUMPBIN /EXPORTS.

Beachten Sie, dass Sie für Funktionen, die mit der Binärschnittstelle "C" verknüpft sind, immer noch keine Werte, Parameter oder Aufrufkonventionen zurückgeben. Diese Informationen sind überhaupt nicht in der verschlüsselt .lib. Das muss man vorher wissen (zB über Prototypen in Header-Dateien), um sie richtig aufzurufen.

Bei Funktionen, die mit der C ++ - Binärschnittstelle verknüpft sind, werden die Aufrufkonvention und die Argumente im exportierten Namen der Funktion (auch als "Name Mangling" bezeichnet) codiert. DUMPBIN /SYMBOLSzeigt Ihnen sowohl den Namen der "verstümmelten" Funktion als auch den decodierten Parametersatz.

Tim Lesher
quelle
6
Sowohl / SYMBOLS als auch / EXPORTS funktionieren heutzutage nicht mehr. Ich muss / ALL mit einer | more-Pipe verwenden, um alle Funktionen in der .lib-Datei zu sehen.
user5280911
100

Öffnen Sie eine visuelle Befehlskonsole (Visual Studio-Eingabeaufforderung)

dumpbin /ARCHIVEMEMBERS openssl.x86.lib

oder

lib /LIST openssl.x86.lib

oder öffne es einfach mit 7-zip :) es ist ein AR-Archiv

Tanguy
quelle
19
Cooler Trick mit 7-Zip Es scheint zwei TXT-Dateien zu geben. Was bedeuten sie?
Damian
21

Ich wollte ein Tool wie ar t libfile.aunter Unix.
Das Windows-Äquivalent ist lib.exe /list libfile.lib.

lgwest
quelle
4
Ja, lib zeigt (nur) die obj-Dateien an. Die Funktionen und Daten in den obj-Dateien werden nicht angezeigt.
user34660
14

"dumpbin -exports" funktioniert für DLL, manchmal aber auch nicht für lib. Für lib können wir "dumpbin-linkermember" oder einfach "dumpbin-linkermember: 1" verwenden.

Frank
quelle
13

DUMPBIN / EXPORTS erhalten die meisten dieser Informationen, und wenn Sie auf MSDN klicken, erhalten Sie den Rest.

Holen Sie sich eines der Visual Studio-Pakete. C ++

Jim
quelle
3

1) Öffnen Sie eine Entwickler-Eingabeaufforderung für VS 2017 (oder eine beliebige Version auf Ihrem Computer) (Diese sollte sich unter folgender Adresse befinden:> Alle Programme -> Visual Studio 2017 (oder eine beliebige Version auf Ihrem Computer) -> Visual Studio Tools -> Entwickler-Eingabeaufforderung für VS 2017.

2) Geben Sie den folgenden Befehl ein:

dumpbin /EXPORTS my_lib_name.lib

user3292568
quelle
2

Wie in anderen Antworten zu sehen ist, müssen Sie eine Entwickler-Eingabeaufforderung öffnen, die in Ihrer Version von Visual Studio angeboten wird dumpbin.exe in Ihrem Ausführungspfad . Andernfalls können Sie die erforderlichen Umgebungsvariablen manuell festlegen.

dumpbin /EXPORTS yourlibrary.libzeigt normalerweise nur eine winzige Liste von Symbolen. In vielen Fällen werden die Funktionen, die die Bibliothek exportiert, nicht angezeigt.

dumpbin /SYMBOLS /EXPORTS yourlibrary.libwird diese Symbole zeigen, aber auch eine unglaublich große Menge anderer Symbos. Sie müssen sie also filtern, möglicherweise mit einer Pipe an findstr(wenn Sie ein MS-Windows-Tool möchten) oder grep.

Suche in der Static Schlüsselworts mit einem dieser Tools scheint ein guter Hinweis zu sein.

Hilton Fernandes
quelle