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