2012-03-02 5 views
2

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

ответ

0

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

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

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

Смежные вопросы