Где находятся символы в динамически присоединяемой библиотеке?

Модератор: Модераторы разделов

Ответить
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Где находятся символы в динамически присоединяемой библиотеке?

Сообщение жучара »

Друзья! Сразу быка за рога:

Shell

$ nm /lib/x86_64-linux-gnu/libc-2.31.so
nm: /lib/x86_64-linux-gnu/libc-2.31.so: нет символов
$

Shell

$ nm /lib/x86_64-linux-gnu/ld-2.31.so
nm: /lib/x86_64-linux-gnu/ld-2.31.so: нет символов
$
А между тем, в одной из этих библиотек (в какой не знаю, видите, нигде ничего нет) находится тело функции printf() (или puts(), я уж не знаю во что она там преобразуется). Ели динамически присоединяемую библиотеку кропать на коленке и самому в ней определять какие-нибудь функции- то да, соответствующие символы (имена функций) в ней будут.

Как же тогда работает простой helloword? Debian 11. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: Где находятся символы в динамически присоединяемой библиотеке?

Сообщение olecya »

Добавлено (16:00):
Динамические библиотеки хранят глобальные метки в отдельном разделе. Так что в отличие от статической библиотеки можно смело ее очистить от стандартных меток с помощью утилиты strip
Добавлено (16:09):
Вот эта секция:

Shell

readelf -S /lib/x86_64-linux-gnu/libc-2.31.so | grep 'dynsym'
[ 5] .dynsym DYNSYM 00000000000074d8 000074d8
Добавлено (16:14):

Shell

>readelf -s /lib/x86_64-linux-gnu/libc-2.31.so | grep '\bprintf'
639: 0000000000056cf0 200 FUNC GLOBAL DEFAULT 14 printf@@GLIBC_2.2.5
>nm -D /lib/x86_64-linux-gnu/libc-2.31.so | grep '\bprintf'
0000000000056cf0 T printf@@GLIBC_2.2.5
0000000000056230 T printf_size@@GLIBC_2.2.5
0000000000056c10 T printf_size_info@@GLIBC_2.2.5
>objdump -T /lib/x86_64-linux-gnu/libc-2.31.so | grep '\bprintf'
0000000000056cf0 g DF .text 00000000000000c8 GLIBC_2.2.5 printf
0000000000056c10 g DF .text 000000000000001c GLIBC_2.2.5 printf_size_info
0000000000056230 g DF .text 00000000000009db GLIBC_2.2.5 printf_size
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Где находятся символы в динамически присоединяемой библиотеке?

Сообщение Bizdelnick »

В разделяемых библиотеках эта информация хранится в динамической таблице символов, nm по умолчанию туда не смотрит.
nm -D /lib/x86_64-linux-gnu/libc-2.31.so
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить