Реализация загрузчика библиотеки времени выполнения - PullRequest
2 голосов
/ 02 марта 2012

Я размышлял над написанием 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, так как яуже читали части о динамическом линковании и загрузке, и ни одна из них, похоже, не объясняет концепцию перемещения понятным образом.

1 Ответ

0 голосов
/ 02 марта 2012

Существует книга под названием «Компоновщики и загрузчики», а также последняя версия из Linkeable-формата исполняемых стандартов интерфейса инструментов. Она может приблизить вас к тому, что нужно для реализации динамического загрузчика. Книга, скорее всего, не издается, но она доступна ниже:

http://www.iecc.com/linker/

С другой стороны, если вы ищете реализацию glibc, она в основном хранится в каталоге dlfcn внутри каталога исходного кода glibc. Потенциально интересная отправная точка - dlfcn / dlopen.c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...