Почему nm libc.so не сообщает никаких символов? - PullRequest
0 голосов
/ 05 января 2019

Я создал простую программу, подобную этой:

g ++ application.cpp -o application.exe

и затем выполнил команду;

ldd application.exe
...
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 
...

Я хочу перечислить все символы библиотеки libc:

nm /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols

nm --defined-only /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols

Почему nm не сообщает никаких символов? Если libc.so.6 не библиотека, а какая-то ссылка на реальную библиотеку, то как мне найти реальную библиотеку?

1 Ответ

0 голосов
/ 05 января 2019

По умолчанию nm читает раздел .symtab в объектах ELF, что необязательно в не перемещаемых объектах. С опцией -D / --dynamic вы можете указать nm прочитать таблицу динамических символов (которые фактически используются во время выполнения). Вы также можете использовать --with-symbol-versions, потому что glibc широко использует управление версиями символов.

В качестве альтернативы вы можете использовать eu-readelf --symbols=.dynsym или objdump -Tw. (readelf -sDW не включает информацию о версиях символов.)

...