Propriedades executáveis binárias do Linux: alternativa ldd?

6

O comando ldd do Linux pode mostrar as bibliotecas dinâmicas usadas por um executável. É um script bash. Mas parece ser frágil e não funciona em alguns binários. Existe uma ferramenta alternativa?

No meu exemplo específico, posso usar:

% arquivo datab2txt

datab2txt: executável LSB de 64 bits ELF, x86-64, versão 1 (SYSV), vinculado estaticamente, para GNU / Linux 2.4.0, não depurado

mas o ldd falha com:

% ldd -v datab2txt

não é um executável dinâmico

    
por Randall 23.03.2011 / 19:30

2 respostas

9

Você também pode fazer:

readelf -d executable | grep NEEDED

Mas isso provavelmente não faz o que você quer. Ele mostra as libs às quais o executable está vinculado, mas não todas as bibliotecas necessárias (uma biblioteca pode exigir outra biblioteca).

    
por 23.03.2011 / 21:28
6

A saída de file diz " estaticamente vinculada ". ldd só funciona em executáveis dinamicamente vinculados.

(Tecnicamente, todo o Linux ldd does invoca o carregador executável do Linux, /lib/ld-linux.so.2 , depois de definir uma variável de ambiente. Portanto, deve ser a maneira mais confiável.)

Alguns programas podem estar usando dlopen() para carregar bibliotecas, a fim de evitar que o programa dependa deles. Por exemplo, o Glibc carrega as bibliotecas do NSS dessa forma porque seus nomes são conhecidos apenas em tempo de execução, não no tempo de compilação / vinculação.

    
por 23.03.2011 / 19:35