Encontre bibliotecas em que um binário foi ligado

37

Eu sei que existe um comando que me lista as libs e respectivas versões de um software foi ligado contra.

Algo com ld ou libtool?

Mas eu não consigo lembrar. Passei algum tempo no google, mas não encontrei nada de útil.

Atualizar
ldd <binary> ajudaria no linux, ( @ < um href="https://superuser.com/users/35754/ernelli"> Ernelli ) enquanto eu descobri que otool -L <binary> faz algo semelhante no MacOS X.

    
por er4z0r 30.01.2011 / 15:35

3 respostas

38

Experimente    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)
    
por 30.01.2011 / 15:45
13

Para encontrar o que precisa diretamente:

readelf -d APP | grep NEEDED

ldd como mencionado em outro lugar mostrará todas as libs diretas e indiretas - tudo o que precisa em tempo de execução. Isso pode não ser uma lista completa, pois você pode abrir coisas dinamicamente com dlopen (), mas isso deve funcionar 99% do tempo.

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

EDIT Posso ver por respostas posteriores que você estava perguntando sobre o OSX, mas quero adicionar à minha resposta sobre as ferramentas do Linux:

Uma coisa que esqueci de mencionar há um bom tempo; você perguntou sobre versões. Nem ldd nem readelf responderá à pergunta "qual 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 reforça isso. Os símbolos podem ser versionados, e você teria que ter um nível ainda mais baixo com nm para ver isso,

    
por 30.01.2011 / 21:24
7

Outra maneira seria usar o objdump.

objdump -x "binary" | grep NEEDED

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

    
por 05.07.2012 / 22:08