Я размышлял над написанием dlopen (), dlsym (), dlclose (), dlerror (), подобной библиотеке для одного из моих встроенных проектов, где даже не существует библиотеки C (для которой я уже написал свою собственную).Библиотеки C / C ++, для которых можно найти здесь www.libcaprice.com).Но что меня беспокоит, так это реализация динамического загрузчика библиотеки.Я взглянул на статью: http://www.sco.com/developers/devspecs/gabi41.pdf Но я не могу обернуть голову вокруг перемещения и как вы инициализируете GOT.
Сначала я подумал, что это должно быть легкоfopen () - библиотека, просмотр заголовка ELF, проверка правильности динамической библиотеки, а затем поиск некоторых символов при использовании dlsym ().Проблема в том, что сама библиотека должна быть инициализирована, или, более конкретно, GOT.Также необходимо провести некоторое перемещение, чтобы убедиться, что все находится в определенных границах и выравнивании.
Я рассмотрел некоторые реализации этой функциональности в пользовательском пространстве, и они кажутся довольно длинными и сложными.и без документов.Поэтому мой вопрос на самом деле таков: существуют ли какие-либо автономные реализации dydl с открытым исходным кодом, которые лицензируются в рамках разрешительной лицензии, MIT или публичного домена.В противном случае, если их нет, и мне придется реализовать свою собственную, кто-то может указать мне правильное направление, откуда я мог бы начать?
Пожалуйста, не связывайте Спецификацию двоичного интерфейса Application V, так как яуже читали части о динамическом линковании и загрузке, и ни одна из них, похоже, не объясняет концепцию перемещения понятным образом.