glibc - получить дескриптор разделяемой библиотеки, имеющей символ, содержащий указанный адрес
Что-то вроде dladdr, которое дает мне динамический дескриптор библиотеки для общего объекта или способ получить дескриптор из базового адреса общего объекта. Файл, содержащий общий объект, возможно, был перемещен или удален, поэтому нет, я не могу dlopen() имя файла, заданное dladdr.
1 ответ
Дескрипторы glibc основаны на link_map. Я могу перебрать все link_map и посмотреть, имеет ли l_addr значение, указанное в dladdr. Адрес этого link_map является дескриптором.
Dietlibc также использует link_map в качестве дескрипторов.
В случае с uClibc есть другая структура - dyn_elf. Содержит указатель на ссылку на карту. Глобальная переменная _dl_symbol_tables имеет указатель на заголовок связанного списка dyn_elf.
Bionic использует свою собственную структуру, которая содержит struct link_map в качестве члена (не указатель).