Загрузить именованные неэкспортированные символы с помощью dlsym?
Можно ли загрузить именованный неэкспортированный символ из каркаса, используя dlsym
?
Символ, который я пытаюсь импортировать, имеет имя, под которым он упоминается в рамках. Это функция, которую мне нужно вызвать.
Я пытаюсь сделать это как обычно dlopen
+ dlsym
Кстати, но когда я пытаюсь загрузить символ, который не экспортируется, dlsym
возвращает нулевой указатель.
1 ответ
dlsym
можно загружать только те функции, которые перечислены в таблице символов. Вы можете перечислить таблицу символов, запустив nm
на рассматриваемой основе.
Вы можете проверить это в источнике dyld: ImageLoaderMachOClassic::findExportedSymbol
это внутренняя реализация dlsym, она просто выполняет двоичный поиск в таблице символов:
А также ImageLoaderMachO::parseLoadCmds
загружает таблицу символов из команд загрузки в заголовке Mach: