Como ver o conteúdo da biblioteca do Windows (* .lib)

181

Eu tenho um arquivo binário - biblioteca estática do Windows (* .lib).
Existe uma maneira simples de descobrir nomes das funções e suas interfaces nessa biblioteca?

Algo semelhante ao emfare elfdumputilitários (em sistemas Linux)?

Nick Borodulin
fonte
1
Nota: O prompt de comando específico do .NET vem com as edições do Visual Studio, mas não com a edição Express. De: social.msdn.microsoft.com/Forums/en-US/…
isgoed

Respostas:

199

Supondo que você esteja falando de uma biblioteca estática, DUMPBIN /SYMBOLSmostra as funções e objetos de dados na biblioteca. Se você está falando de uma biblioteca de importação ( .libusada para se referir a símbolos exportados de uma DLL), então você deseja DUMPBIN /EXPORTS.

Observe que, para funções vinculadas à interface binária "C", isso ainda não fará com que você retorne valores, parâmetros ou convenções de chamada. Essa informação não está codificada de forma .libalguma; você precisa saber isso com antecedência (por meio de protótipos nos arquivos de cabeçalho, por exemplo) para chamá-los corretamente.

Para funções vinculadas à interface binária do C ++, a convenção e os argumentos de chamada são codificados no nome exportado da função (também chamado de "nome incorreto"). DUMPBIN /SYMBOLSmostrará o nome da função "mutilada" e o conjunto de parâmetros decodificados.

Tim Lesher
fonte
6
Ambos / SYMBOLS e / EXPORTS não funcionam atualmente. Eu tenho que usar / ALL com um pipe | more para ver todas as funções no arquivo .lib.
user5280911
100

Abra um console de comando visual (prompt de comando do Visual Studio)

dumpbin /ARCHIVEMEMBERS openssl.x86.lib

ou

lib /LIST openssl.x86.lib

ou apenas abra-o com 7-zip :) é um arquivo AR

Tanguy
fonte
19
Truque legal com 7-zip parece haver dois arquivos .txt lá o que eles significam?
Damian
21

Eu queria uma ferramenta como ar t libfile.ano unix.
O equivalente do Windows é lib.exe /list libfile.lib.

lgwest
fonte
4
Sim lib (apenas) mostrará os arquivos obj; não mostrará as funções e os dados nos arquivos obj.
user34660
14

"dumpbin -exports" funciona para dll, mas às vezes pode não funcionar para lib. Para a lib, podemos usar "dumpbin -linkermember" ou apenas "dumpbin -linkermember: 1".

Frank
fonte
13

DUMPBIN / EXPORTS maior parte dessas informações e, ao acessar o MSDN, o restante.

Obtenha um dos pacotes do Visual Studio; C ++

jim
fonte
3

1) Abra um prompt de comando do desenvolvedor para o VS 2017 (ou qualquer versão que você tenha na sua máquina) (ele deve estar localizado em: Menu Iniciar -> Todos os programas -> Visual Studio 2017 (ou qualquer versão que você tenha na sua máquina) -> Ferramentas do Visual Studio -> Prompt de Comando do Desenvolvedor para o VS 2017.

2) Digite o seguinte comando:

dumpbin /EXPORTS my_lib_name.lib

user3292568
fonte
2

Como pode ser visto em outras respostas, você precisará abrir um Prompt de Comando do Desenvolvedor oferecido na sua versão do Visual Studio para ter dumpbin.exeno seu caminho de execução. Caso contrário, você pode definir as variáveis ​​de ambiente necessárias manualmente.

dumpbin /EXPORTS yourlibrary.libnormalmente mostrará apenas uma pequena lista de símbolos. Em muitos casos, não mostrará as funções que a biblioteca exporta.

dumpbin /SYMBOLS /EXPORTS yourlibrary.libmostrará esses símbolos, mas também uma quantidade incrivelmente grande de outros simbos. Então, você precisa filtrá-los, possivelmente com um pipe findstr(se você deseja uma ferramenta MS-Windows) ou grep.

Pesquisando a Staticpalavra - chave usando uma dessas ferramentas parece ser uma boa dica.

Hilton Fernandes
fonte