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 emfar
e elfdump
utilitários (em sistemas Linux)?
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 emfar
e elfdump
utilitários (em sistemas Linux)?
Respostas:
Supondo que você esteja falando de uma biblioteca estática, DUMPBIN /SYMBOLS
mostra as funções e objetos de dados na biblioteca. Se você está falando de uma biblioteca de importação ( .lib
usada 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 .lib
alguma; 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 /SYMBOLS
mostrará o nome da função "mutilada" e o conjunto de parâmetros decodificados.
LIB.EXE é o bibliotecário do VS
http://msdn.microsoft.com/en-us/library/7ykb2k5f(VS.80).aspx
(como libtool no Unix)
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
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.exe
no seu caminho de execução. Caso contrário, você pode definir as variáveis de ambiente necessárias manualmente.
dumpbin /EXPORTS yourlibrary.lib
normalmente 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.lib
mostrará 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 Static
palavra - chave usando uma dessas ferramentas parece ser uma boa dica.