Там нет функции Libc, чтобы сделать это. Однако вы можете написать их самостоятельно (хотя код несколько задействован).
В Linux dlopen()
фактически возвращает адрес link_map
структуры, которая имеет элемент с именем l_addr
, который указывает на базовый адрес загруженного общего объекта (предполагается, что система не Рандомайз совместно размещения библиотеки, и что ваш библиотека не была предварительно привязана).
В Linux, надежный способ найти базовый адрес (адрес Elf*_Ehdr
) должен использовать dl_iterate_phdr()
после dlopen()
библиотеки.
Имея заголовок ELF, вы должны быть в состоянии перебрать список экспортируемых символов (динамические таблицы символов), с помощью первого размещения Elf*_Phdr
типа PT_DYNAMIC
, а затем местонахождения DT_SYMTAB
, DT_STRTAB
записи, и перебирает все символы в таблице динамических символов. Используйте /usr/include/elf.h
, чтобы вести вас.
Кроме того, вы можете использовать libelf, но я не могу вести вас, так как у меня нет предыдущего опыта.
Наконец, обратите внимание, что упражнение несколько бесполезно: вы получите список определенных функций, но вы не знаете, как их назвать (какие параметры они ожидают), так что в чем смысл?
Это звучит для меня как ОП ищу, чтобы получить список экспортируемых символов из библиотеки. Который я не думаю, что это возможно, не делая некоторого анализа секций в структуре ELF. –