Эмулировать динамический загрузчик для исправления смещений в общей библиотеке

У меня на работе интересная ситуация, для которой я пытаюсь найти хорошее решение. У нас есть код, который работает на многоядерном MIPS голом железе (без ядра). У нас есть требование к интеграции с каким-либо сторонним кодом, который необходимо обновить.
Я думал о компиляции стороннего кода как PIC, а затем изменил GOT для символов кода / данных, когда я загружаю этот код (у меня есть контроль над тем, где код будет находиться). Кроме того, предположим, что интерфейсы в стороннем коде не изменяются, поэтому нет новых записей PLT / GOT.
Будет ли это работать? Какие еще вещи я должен рассмотреть?

11

Решение

Правильный ли ответ дольше, чем «встроить динамический компоновщик / загрузчик»? Ваша проблема, похоже, решена ld.so и другими пользователями. Описание всех вещей, которые должен учитывать динамический компоновщик / загрузчик, является темой книг, таких как Линкеры и загрузчики Джон Левин.

1

Другие решения

Будет ли Linux / Unix binutils objcopy быть тем, что вы ищете. Предполагая, что вы создаете все свои двоичные файлы одновременно, вместо того, чтобы фактически хотеть динамически загружать их во время выполнения в случайном порядке [и у вас недостаточно памяти, чтобы распределить их по этой памяти], тогда я думаю, что это сработает.

Конечно, если вам ТОЛЬКО нужно исправить GOT, тогда я не понимаю, почему вы не можете просто сделать это — это не так уж сложно написать что-то, что делает это. Но objcopy уже написан, и может делать довольно много бинарных / исполняемых файлов, «возиться» (я использовал его для создания загрузочных дисков для различных систем, включая BIOS для ПК и т. П.) [Не то чтобы я придумал с идеей, больше похоже на то, что я взял чей-то make-файл, в котором, как оказалось, есть objcopy — я просто посмотрел на то, что он сделал, чтобы понять, как он создавал ROM, когда что-то пошло не так в тот или иной момент]

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector