Динамический линкер Redox перестал быть привязан к фиксированным адресам
20.02.2026Загрузка динамических библиотек в relibc сделана независимой от адреса: базовый адрес образа стал частью e_entry, а для исполняемых файлов введён режим FIXED_NOREPLACE и обновлена нижняя граница отображений памяти.
Что такое независимость от адреса загрузки
Современные системы не размещают программу по одному фиксированному адресу. Процесс получает случайный базовый адрес — так работает рандомизация расположения, одно из средств затруднения эксплуатации: адрес функции заранее неизвестен, и подготовить атаку на конкретное место нельзя.
Чтобы это работало, загрузчик обязан быть гибким: взять базовый адрес образа, прибавить смещения из его таблицы перемещений и получить адреса всех символов. Программа, собранная с расчётом на конкретный адрес, такой возможности лишается — поэтому такие сборки помечаются особым флагом.
Что изменено
В динамическом линкере Redox базовый адрес образа стал частью e_entry — поля заголовка исполняемого файла. Раньше, судя по описанию, адрес вычислялся иначе, и для обычных собранных программ это работало, но схема не позволяла размещать образ произвольно.
Для исполняемых файлов — тех, что не требуют перемещений, — введён режим FIXED_NOREPLACE: при загрузке ядро сообщает, что по этому адресу уже что-то размещено, вместо того чтобы молча переписать. Это защищает от выбора адреса, который занят.
Также обновлена нижняя граница, с которой система размещает отображения памяти, и устранено обнуление памяти там, где она уже обнулена.
Практический смысл
Появляется возможность включать рандомизацию расположения: без независимой от адреса загрузки её просто нельзя было бы включить. Для операционной системы это заметный уровень защищённости по умолчанию.
Второй эффект — совместимость: формат с базой в e_entry совпадает с общепринятой практикой, а значит, бинарные файлы, рассчитанные на такую схему, начинают работать без правок.
Оригинал
Коммиты от 20 февраля 2026 года в репозитории redox-os/relibc: fix(redox-rt): add base address to e_entry, fix(redox-rt): FIXED_NOREPLACE for ET_EXEC, fix(redox-rt): update min mmap address for ET_EXEC. Сводка «This Month in Redox — February 2026», раздел «Relibc Improvements»
Упоминаний: 1 · Просмотров: 4