Encontre bibliotecas às quais um binário foi vinculado

40

Eu sei que existe um comando que me lista as bibliotecas e respectivas versões às quais um software foi vinculado.

Algo com ld ou libtool?

Mas eu simplesmente não consigo me lembrar. Passou algum tempo no google, mas não apresentou nada de útil.

A atualização
ldd <binary> ajudaria no linux ( da @ Ernelli ), enquanto eu descobria que otool -L <binary>faz algo semelhante no MacOS X.

er4z0r
fonte
stackoverflow.com/questions/50159/…
Ciro Santilli escreveu

Respostas:

41

Tente ldd binary-exec

Exemplo:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)
Ernelli
fonte
Dang! Então, minha primeira tentativa foi certa. Só precisa instalá-lo no meu Mac para que efectivamente sabe o comando ;-)
er4z0r
@ er4z0r: Para sua informação, o Mac OS é BSD, não o Linux .
grawity
6
Grwaity: você está certo. Enquanto o ldd ajudaria no linux, descobri que 'otool -L <binary>' faz algo semelhante.
er4z0r
15

Para encontrar o que ele precisa diretamente:

readelf -d APP | grep NEEDED

lddcomo mencionado em outro lugar, mostrará todas as bibliotecas diretas e indiretas - tudo o que é necessário em tempo de execução. Esta pode não ser uma lista completa, pois você pode abrir itens dinamicamente com dlopen (), mas isso deve funcionar 99% do tempo.

ld e libtool são usados ​​no momento da compilação / link. Eles não são úteis quando você tem um aplicativo.

Edição Posso ver pelas respostas posteriores que você estava perguntando sobre o OSX, mas quero adicionar à minha resposta nas ferramentas do Linux:

Uma coisa que eu esqueci de mencionar, há um bom tempo; você perguntou sobre versões. Nem lddnem readelfvai responder à pergunta "qual é a versão". Eles informarão o nome do arquivo da biblioteca que você está procurando e a convenção de nomenclatura pode ter algumas informações sobre a versão, mas nada impõe isso. Os símbolos podem ter versão, e você precisaria de um nível ainda mais baixo nmpara vê-los,

Rich Homolka
fonte
9

Outra maneira seria usar o objdump.

objdump -x "binário" | grep NECESSÁRIO

Isso mostra todas as dependências necessárias apenas para este binário. Muito útil.

Pranav
fonte