Я работаю с динамически связанными библиотеками (.dll
) в Windows или общими объектами (.so
) в Linux.
Моя цель - написать некоторый код, который может - дать абсолютный путь к библиотеке на диске - вернуть список всех экспортируемых функций (таблица экспорта) этой библиотеки и, в конечном итоге, иметь возможность вызывать эти функции. Это должно работать на Windows (с DLL), а также на Linux (с так).
Я пишу оболочку, которая делит вызовы функций в соответствующей библиотеке. Поэтому я получаю путь, имя функции и список параметров, которые затем хочу переслать. дело в том, что я хочу знать, существует ли данная функция, прежде чем пытаться ее вызвать
С здесь Я нашел независимый от платформы способ открытия и закрытия библиотеки, а также получения указателя на функцию с заданным именем.
Таким образом, остается только получить имена доступных функций.
По этой теме я нашел этот вопрос , имеющий дело только с той же проблемой, что и для конкретного решения Linux. В данном ответе сказано
Для этого нет функции libc. Однако вы можете написать его самостоятельно (или скопировать / вставить код из такого инструмента, как readelf).
Это ясно указывает на то, что есть инструменты для того, что я ищу. Вопрос только в том, может ли он работать как на Windows, так и на Linux? Если нет, то как бы я поступил об этом самостоятельно?
Здесь - реализация C # (на самом деле это код, который я хочу перенести на C ++), делающая то, что я хочу (хотя только для окон). Для меня это выглядит так, как будто структура библиотеки обрабатывается вручную. Если это путь, то где я могу найти необходимую информацию о структуре библиотеки?