Como posso descobrir facilmente as dependências diretas de objetos compartilhados de um binário Linux no formato ELF?
Estou ciente da ferramenta ldd, mas isso parece gerar todas as dependências de um binário, incluindo as dependências de qualquer objeto compartilhado do qual o binário é dependente.
Respostas:
Você pode usar
readelf
para explorar os cabeçalhos ELF.readelf -d
listará as dependências diretas comoNEEDED
seções.fonte
Se você deseja localizar dependências recursivamente (incluindo dependências de dependências, dependências de dependências de dependências etc.)…
Você pode usar o
ldd
comando ldd - imprime dependências de bibliotecas compartilhadasfonte
A
objdump
ferramenta pode fornecer essas informações. Se você invocarobjdump
com a-x
opção, para que ela produza todos os cabeçalhos, você encontrará as dependências de objetos compartilhados logo no início na "Seção dinâmica".Por exemplo, a execução
objdump -x /usr/lib/libXpm.so.4
no meu sistema fornece as seguintes informações na "Seção dinâmica":As dependências diretas de objetos compartilhados estão listadas como valores 'NECESSÁRIOS'. Então, no exemplo acima,
libXpm.so.4
no meu sistema só precisalibX11.so.6
elibc.so.6
.É importante observar que isso não significa que todos os símbolos necessários para a passagem do binário
objdump
estarão presentes nas bibliotecas, mas mostra pelo menos quais bibliotecas o carregador tentará carregar ao carregar o binário.fonte
O ldd -v imprime a árvore de dependência na seção "Informações da versão: '. O primeiro bloco nessa seção são as dependências diretas do binário.
Consulte Hierárquico ldd (1)
fonte
objdump -x <binary> | grep "NEEDED"
? Quero dizer, ambos são quase exatamente iguais, só estou conseguindo um.so
arquivo a maisldd
queobjdump
. Mas o fato de os resultados não serem os mesmos me faz pensar em qual método é mais preciso.