Почему nm не показывает символы для /lib/i386-linux-gnu/libc.so.6?

31

Я ожидал увидеть количество символов в файле libc.so.6, включая printf . Я использовал инструмент nm , чтобы найти их, однако он говорит, что в libc.so.6 нет символа.

masec
источник

Ответы:

54

Скорее всего, у него удалены обычные символы, а остались динамические символы, которые вы можете получить nm -D.

PSkocik
источник
11

@PSkocik ответил на это. Я просто хочу добавить больше деталей. В ELF есть два вида разделов символов: .symtabи .dynsym(подробности см. В Стандартной базовой спецификации ядра Linux, также известной как LSB_5.0.0 ). .symtabдля шага связывания самой разделяемой библиотеки. Как только связь завершена, .symtabраздел больше не нужен. В .dynsymразделе содержатся важные символы, которые должны быть найдены динамическим компоновщиком во время выполнения. nmпо умолчанию только дамп символов в .symtabразделе.

LSB_5.0.0 Раздел 10.2.2.1, «Типы разделов ELF», говорит, что соответствующая совместно используемая библиотека должна иметь один .symtabили .dynsymоба, но не оба. Как часть библиотеки ABI, libc удалена из .symtabсоответствия спецификации.

kula85
источник
0

Выясните, является ли это общим объектом или обычным ASCII-файлом. Если это общий объект, вы должны увидеть «ELF 32-битный LSB общий объект»

file /lib/i386-linux-gnu/libc.so.6
jncc99
источник
libc.so.6очевидно, является общим объектом.
Жиль "ТАК - перестань быть злым"
Я никогда не предполагаю в среде Linux. Учитывая, что кто-то мог прикоснуться к корневым каталогам. Да, по имени это явно объект общего доступа. И это не повредит проверить; когда вы не получаете ожидаемый результат.
jncc99