Por que nm não mostra símbolos para /lib/i386-linux-gnu/libc.so.6?

31

Eu esperava ver o número de símbolos no arquivo libc.so.6, incluindo printf . Eu usei a ferramenta nm para encontrá-los, no entanto, diz que não há símbolo na libc.so.6.

masec
fonte

Respostas:

54

Provavelmente, seus símbolos regulares foram removidos e o que resta são seus símbolos dinâmicos, com os quais você pode obter nm -D.

PSkocik
fonte
11

A @PSkocik respondeu a isso. Eu só quero adicionar mais detalhes. Existem dois tipos de seções de símbolos no ELF: .symtabe .dynsym(consulte a Especificação básica do Linux Standard Core, também conhecida como LSB_5.0.0 , para obter detalhes). .symtabé para a etapa de vinculação da própria lib compartilhada. Depois que a vinculação terminar, a .symtabseção não será mais necessária. A .dynsymseção contém símbolos importantes que devem ser pesquisados ​​pelo vinculador dinâmico em tempo de execução. nmpor padrão, apenas despeja símbolos na .symtabseção.

LSB_5.0.0 Seção 10.2.2.1, “Tipos de seção ELF”, diz que uma lib compartilhada em conformidade deve ter uma .symtabou .dynsymmas não ambas. Como parte da biblioteca ABI, libc é retirado da .symtabespecificação conforme.

kula85
fonte
0

Descubra se é um objeto compartilhado ou um arquivo ASCII comum. Se for um objeto compartilhado, você verá "Objeto compartilhado ELF de 32 bits LSF"

file /lib/i386-linux-gnu/libc.so.6
jncc99
fonte
libc.so.6é oviosamente um objeto compartilhado.
Gilles 'SO- stop be evil'
Eu nunca assumo em um ambiente Linux. Considerando que alguém poderia ter tocado os diretórios raiz. Sim, pelo nome é obviamente um objeto de compartilhamento. E não custa verificar; quando você não estiver obtendo a saída esperada.
Jncc99