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

6

O comando Linux ldd 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, eu posso usar:

% arquivo datab2txt

datab2txt: Executável ELF de 64 bits LSB, x86-64, versão 1 (SYSV), vinculado estaticamente, para GNU / Linux 2.4.0, sem remoção

mas o ldd falha com:

% ldd -v datab2txt

não é um executável dinâmico

Randall
fonte
O módulo não depende de carregar dinamicamente nenhuma biblioteca. O comando ldd funciona nesse caso.
BillThor

Respostas:

9

Você também pode fazer:

readelf -d executable | grep NEEDED

Mas isso provavelmente não faz o que você deseja. Ele mostra as bibliotecas executablevinculadas, mas não todas as bibliotecas necessárias (uma biblioteca pode exigir outra biblioteca).

Rich Homolka
fonte
também não está imprimindo caminhos para as bibliotecas (como o ldd)
quinta
6

A saída de filediz " estaticamente vinculada ". lddfunciona apenas em executáveis ​​vinculados dinamicamente.

(Tecnicamente, tudo o que o Linux lddfaz é chamar 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 sendo usados dlopen()para carregar bibliotecas, a fim de evitar que o programa dependa delas. Por exemplo, o Glibc carrega as bibliotecas do NSS dessa maneira porque seus nomes são conhecidos apenas no tempo de execução, não no momento da compilação / vinculação.

gravidade
fonte