a.out заменяется форматом файла ELF?

У меня есть несколько вопросов:

  • Почему был a.out замененный ELF?
  • Каковы были главные дефекты в формате a.out, который привел к повышению формата файла ELF?
  • Более ранние дампы ядра были основаны на a.out, но теперь они основаны на ELF. Что различные преимущества обеспечиваются ELF?
12
задан Thomas Bonini 28 February 2010 в 20:08
поделиться

2 ответа

Формат a.out заставляет разделяемые библиотеки занимать фиксированное место в памяти. Если вы хотели распространять разделяемую библиотеку a.out, вам нужно было зарегистрировать ее адресное пространство. Это было хорошо для производительности, но совсем не масштабировалось. Убедитесь сами , насколько это было сложно (linuxjournal).

Напротив, в ELF разделяемые библиотеки могут быть загружены в любом месте памяти и даже могут отображаться по разным адресам для разных приложений, работающих на одном компьютере (при этом код по-прежнему эффективно загружается только в одном месте физической памяти). ! Для этого в архитектуре IA-32 необходимо пожертвовать регистром (% ebx). Более полная ссылка , показывающая, что разделяемые библиотеки стали более сложными в ELF, но это сложность на стороне компилятора, а не на стороне программиста.

15
ответ дан 2 December 2019 в 20:40
поделиться

Насколько я помню, одна из исходных проблем с форматом a.out заключалась в том, что он поддерживал только три раздела: текст, данные и bss. ELF допускает любое количество (или, по крайней мере, намного больше). Формат заголовка a.out был очень простым, что-то вроде:

word <magic>
word <text size>
word <data size>
word <bss size>

Формат ELF, напротив, имеет заголовки разделов с именами, размерами и т. Д.

Наличие большего количества разделов позволяет использовать стандартные разделы, но также дает нам const разделы, разделы конструктора и даже по одному разделу на функцию, если мы этого хотим.

0
ответ дан 2 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: