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.


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)

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,


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.