a.out заменен форматом файла ELF? - PullRequest
12 голосов
/ 28 февраля 2010

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

  • Почему a.out был заменен на ELF?
  • Какие основные недостатки в формате a.out привели к повышению формата файлов ELF?
  • Раньше дампы ядра были основаны на a.out, но теперь они основаны на ELF. Какие преимущества дает ELF?

Ответы [ 2 ]

15 голосов
/ 28 февраля 2010

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

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

0 голосов
/ 28 февраля 2010

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

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

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

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

...