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.
fonte
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.
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
.
A @PSkocik respondeu a isso. Eu só quero adicionar mais detalhes. Existem dois tipos de seções de símbolos no ELF: .symtab
e .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 .symtab
seção não será mais necessária. A .dynsym
seção contém símbolos importantes que devem ser pesquisados pelo vinculador dinâmico em tempo de execução. nm
por padrão, apenas despeja símbolos na .symtab
seçã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 .symtab
ou .dynsym
mas não ambas. Como parte da biblioteca ABI, libc é retirado da .symtab
especificação conforme.
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
libc.so.6
é oviosamente um objeto compartilhado.