Come visualizzare il contenuto della libreria di Windows (* .lib)


181

Ho un file binario - libreria statica di Windows (* .lib).
Esiste un modo semplice per scoprire i nomi delle funzioni e della loro interfaccia da quella libreria?

Qualcosa di simile emfare elfdumputilità (su sistemi Linux)?


1
Nota: il prompt dei comandi specifico per .NET viene fornito con le versioni di Visual Studio ma non con l'edizione Express. Da: social.msdn.microsoft.com/Forums/en-US/…
isgoed

Risposte:


199

Supponendo che stai parlando di una libreria statica, DUMPBIN /SYMBOLSmostra le funzioni e gli oggetti dati nella libreria. Se stai parlando di una libreria di importazione ( .libutilizzata per fare riferimento a simboli esportati da una DLL), allora vuoi DUMPBIN /EXPORTS.

Si noti che per le funzioni collegate all'interfaccia binaria "C", ciò non consente di restituire valori, parametri o convenzioni di chiamata. Quella informazione non è codificata .libaffatto; devi saperlo in anticipo (ad esempio tramite prototipi nei file di intestazione) per poterli chiamare correttamente.

Per le funzioni collegate con l'interfaccia binaria C ++, la convenzione di chiamata e gli argomenti sono codificati nel nome esportato della funzione (chiamato anche "nome mangling"). DUMPBIN /SYMBOLSti mostrerà sia il nome della funzione "mangled" che il set di parametri decodificato.


6
Entrambi / SIMBOLI e / ESPORTAZIONI non funzionano al giorno d'oggi. Devo usare / ALL con una | più pipe per vedere tutte le funzioni nel file .lib.
user5280911,

100

Apri una console dei comandi visivi (prompt dei comandi di Visual Studio)

dumpbin /ARCHIVEMEMBERS openssl.x86.lib

o

lib /LIST openssl.x86.lib

o semplicemente aprilo con 7-zip :) è un archivio AR


19
Fantastico trucco con 7-zip sembra che ci siano due file .txt lì cosa significano?
Damian,

21

Volevo uno strumento come ar t libfile.ain Unix.
L'equivalente di Windows è lib.exe /list libfile.lib.


4
Sì lib mostrerà (solo) i file obj; non mostrerà le funzioni e i dati nei file obj.
user34660

14

"dumpbin -exports" funziona per dll, ma a volte potrebbe non funzionare per lib. Per lib possiamo usare "dumpbin -linkermember" o semplicemente "dumpbin -linkermember: 1".



13

DUMPBIN / EXPORTS Otterrà la maggior parte di tali informazioni e colpire MSDN otterrà il resto.

Ottieni uno dei pacchetti di Visual Studio; C ++


3

1) Apri un prompt dei comandi per sviluppatori per VS 2017 (o qualunque versione tu abbia sulla tua macchina) (Dovresti trovarti sotto: Menu Start -> Tutti i programmi -> Visual Studio 2017 (o qualunque versione tu abbia sulla tua macchina) -> Strumenti di Visual Studio -> Prompt dei comandi per sviluppatori per VS 2017.

2) Immettere il comando seguente:

dumpbin /EXPORTS my_lib_name.lib


2

Come puoi vedere in altre risposte, dovrai aprire un Prompt dei comandi per gli sviluppatori offerto nella tua versione di Visual Studio da inserire dumpbin.exenel tuo percorso di esecuzione. Altrimenti, è possibile impostare manualmente le variabili di ambiente necessarie.

dumpbin /EXPORTS yourlibrary.libdi solito mostrerà solo un piccolo elenco di simboli. In molti casi, non mostrerà le funzioni esportate dalla libreria.

dumpbin /SYMBOLS /EXPORTS yourlibrary.libmostrerà quei simboli, ma anche una quantità incredibilmente enorme di altri simboli. Quindi, devi filtrarli, possibilmente con una pipe findstr(se vuoi uno strumento MS-Windows), o grep.

Cercare una Staticparola chiave usando uno di questi strumenti sembra essere un buon suggerimento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.