Модель памяти Linux IA-32 - PullRequest
5 голосов
/ 12 января 2010

Я смотрю на модель памяти процесса IA-32 в Linux, и у меня к ней простой вопрос. Что содержат серые области на картинке? Они только включены, чтобы показать начало и конец памяти? Итак, текст начинается с 0x0, а стек начинается с 0xFFFFFFFF?

Возобновлена: Привет, в курсе ОС я посещаю этот вопрос снова становится актуальным. В частности, мне нужно знать, что содержат серые области. Судя по ответам, я вижу, что он содержит код ядра вверху и страницу разыменования нулевого указателя внизу. Но каков код ядра? Я не предполагаю, что это вся операционная система, но может ли это быть встроенный планировщик, вызовы библиотеки ядра или?

С наилучшими пожеланиями, Лассе Эспехолт

альтернативный текст http://img403.imageshack.us/img403/3156/capturecj.png

Ответы [ 5 ]

9 голосов
/ 12 января 2010

Я думаю, что это более точно: alt text

5 голосов
/ 12 января 2010

Также обратите внимание, что из-за рандомизации макета адресного пространства , начальные адреса некоторых секций случайным образом смещены по сравнению со значениями в диаграммах.

5 голосов
/ 12 января 2010

Я думаю, что серые области просто представляют области неопределенного размера. Текст программы, конечно, не будет начинаться с 0x0, потому что большинство ОС используют их как недопустимые страницы, поэтому нулевые разыменования могут быть легко обнаружены Стеки потоков также не доходят до 0xffffffff, потому что обычно в верхней четверти (или половине) отображается память ядра.

3 голосов
/ 09 января 2011

Никто, кажется, не упомянул, что не вся память в доступном пространстве обязательно отображается (и почти никогда не бывает).

2 голосов
/ 12 января 2010

Обратите внимание, что область нулевой страницы внизу адресного пространства равна , а не , фактически запрещенной для использования приложением в распространенных дистрибутивах Linux. Ядро делало это, а затем обрабатывало это решение модулем LSM (например, SELinux, AppArmor). И они не применяли одно и то же правило, поэтому оказалось, что процессы могут отображать память в 0x0. Это было частью уязвимости недавних эксплойтов «разыменование нулевого указателя ядра».

...