Почему адреса виртуальной памяти для бинарных файлов Linux начинаются с 0x8048000? - PullRequest
30 голосов
/ 03 июня 2010

Разборка двоичного файла ELF в системе Ubuntu x86 Я не мог не заметить, что секция кода (.text) начинается с виртуального адреса 0x8048000, и все нижние адреса памяти кажутся неиспользованными.

Это кажется довольно расточительным, и все, что появляется в Google, это либо фольклор с участием STACK_TOP , либо защита от разыменования нулевого указателя. Последний случай выглядит так, как будто его можно исправить, используя одну страницу вместо того, чтобы оставить пробел в 128 МБ.

Итак, мой вопрос заключается в следующем - есть ли окончательный ответ на вопрос, почему макет был зафиксирован для этих значений или это просто произвольный выбор?

1 Ответ

25 голосов
/ 03 июня 2010

Из Компоновщики и загрузчики Книга:

В 386 системах базовый текстовый адрес равен 0x08048000, что позволяет достаточно большой стек под текстом, оставаясь при этом над адресом 0x08000000, что позволяет большинству программ использовать одну таблицу страниц второго уровня. (Напомним, что на 386 каждая таблица второго уровня отображает адреса 0x00400000.)

...