2010-06-03 8 views
28

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

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

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

+0

Я не знаю ответа на данный вопрос; но, возможно, эта статья может помочь или хотя бы обеспечить интересное чтение! http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html –

+0

Возможный дубликат [Почему виртуальный адрес точки ввода элемента ELF формы 0x80xxxxx, а не нуль 0x0?] (http: // stackoverflow .com/вопросы/2187484/почему-это-The-эльф-исполнение-точка входа в виртуальную-адрес-оф-форм-0x80xxxxx-и-п) –

ответ

24

Из Linkers and loaders книги:

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