Динамический линкер 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