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

16

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á nenhum símbolo em libc.so.6.

    
por masec 11.05.2016 / 22:48

3 respostas

32

Ele provavelmente tem seus símbolos regulares removidos e o que resta são seus símbolos dinâmicos, que você pode obter com nm -D .

    
por 11.05.2016 / 22:53
2

@PSkocik respondeu isso. Eu só quero adicionar mais detalhes. Existem dois tipos de seções de símbolos no ELF: .symtab e .dynsym (consulte o Especificação Linux Básica Básica, também conhecida como LSB_5.0.0 , para detalhes). .symtab é para a etapa de vinculação da própria biblioteca compartilhada. Quando a vinculação estiver concluída, a seção .symtab não será mais necessária. A seção .dynsym contém símbolos importantes que devem ser pesquisados pelo vinculador dinâmico no tempo de execução. nm , por padrão, apenas exibe símbolos na seção .symtab .

LSB_5.0.0 Seção 10.2.2.1, “ Tipos de seção ELF ”, diz que uma biblioteca compartilhada em conformidade deve ter .symtab ou .dynsym , mas não ambos. Como parte da biblioteca ABI, a libc é removida do .symtab para estar em conformidade com as especificações.

    
por 23.10.2018 / 03:20
0

Descubra se é um objeto compartilhado ou um arquivo ASCII regular. Se for um objeto compartilhado, você deverá ver "objeto compartilhado ELB de 32 bits LSB"

file /lib/i386-linux-gnu/libc.so.6
    
por 12.05.2016 / 00:16