Почему адреса виртуальной памяти для двоичных файлов Linux начинаются с 0x8048000?
-
24-10-2019 - |
Вопрос
Разборка бинарного эльфа в системе Ubuntu X86 Я не мог не заметить, что раздел кода (.Text) начинается с виртуального адреса 0x8048000, и все более низкие адреса памяти, кажется, не используются.
Это кажется довольно расточительным, и все появляется все Google, либо Фольклор с участием Stack_top или защита от нулевых конечностей. Последний случай выглядит так, как будто его можно исправить, используя одну страницу вместо того, чтобы оставить разрыв на 128 МБ.
Итак, мой вопрос: есть ли окончательный ответ на то, почему макет был прикреплен к этим значениям или это просто произвольный выбор?
Решение
От Линкеры и погрузчики книга:
В 386 системах текстовый базовый адрес составляет 0x08048000, который разрешает достаточно большой стек под текстом, оставаясь выше адреса 0x08000000, что позволяет большинству программ использовать одну таблицу страницы второго уровня. (Напомним, что на 386 каждая таблица второго уровня карты 0x00400000 Адрес.)