Helpers - компьютеры, интернет, программирование

Почему ld.so является общим объектом?

В настоящее время я пишу динамический компоновщик, и меня что-то беспокоит. Почему ld.so (динамический компоновщик моей системы) является общим объектом? Почему это не может быть просто статический исполняемый файл (ET_EXEC)?

Я попытался найти ответ в binfmt_elf.c ядра Linux, но, насколько я понимаю, он ясно показывает, что ваш интерпретатор ELF может быть статическим исполняемым файлом.

РЕДАКТИРОВАТЬ: я думаю, что мои мысли сводятся к следующему: может ли динамический компоновщик быть простым исполняемым файлом ELF (ET_EXEC)?

binfmt_elf.c.559:

/* First of all, some simple consistency checks */
    if (interp_elf_ex->e_type != ET_EXEC &&
        interp_elf_ex->e_type != ET_DYN)
        goto out;

PS: я надеюсь, что это правильное место, я не знаю, должен ли я разместить его здесь или на бирже стека Unix. Мне также жаль, если мой вопрос глупый, но отсутствие ответа на него сводит меня с ума.

28.08.2019

  • Философия выбора дизайна? Механизм she-bang имеет исполняемый файл, интерпретирующий файл. Вы спрашиваете, почему загрузчик не действует так же? Я предполагаю, что это может быть вопрос экономии подотчетности процессов... 28.08.2019

Ответы:


1

Может ли динамический компоновщик быть простым исполняемым файлом ELF (ET_EXEC)?

Да, оно может.

Однако ET_EXEC должен загружаться по адресу, с которым он был связан, и этот адрес может конфликтовать с адресом, с которым связан сам a.out. Если такой конфликт произойдет, ядро ​​​​либо уничтожит процесс еще до его запуска, либо он будет mmap a.out "поверх" ld.so, и полученный двоичный файл выйдет из строя.

Вы можете переместить ld.so в сторону от обычного адреса ссылки a.out, но кто-то всегда может связать a.out по необычному адресу.

Если вместо этого вы свяжете ld.so как ET_DYN с нулевым адресом загрузки, то ни одна из вышеперечисленных проблем не может возникнуть.

31.08.2019
Новые материалы

Интуитивное понимание тензоров в машинном обучении
Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

Почему объяснимость так важна прямо сейчас?
По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

Анимированный математический анализ
Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

Создание простого слайдера изображений с помощью JavaScript
Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

Создание базы данных с помощью супергероя «Python»
В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

ИИ для чайников: руководство для начинающих по пониманию будущего технологий
Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..