Почему адреса виртуальной памяти для двоичных файлов Linux начинаются с 0x8048000?

StackOverflow https://stackoverflow.com/questions/2966426

  •  24-10-2019
  •  | 
  •  

Вопрос

Разборка бинарного эльфа в системе Ubuntu X86 Я не мог не заметить, что раздел кода (.Text) начинается с виртуального адреса 0x8048000, и все более низкие адреса памяти, кажется, не используются.

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

Итак, мой вопрос: есть ли окончательный ответ на то, почему макет был прикреплен к этим значениям или это просто произвольный выбор?

Это было полезно?

Решение

От Линкеры и погрузчики книга:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top