2013-02-23 3 views
0

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

ответ

4

В большинстве современных процессоров (Intel x86, ARM большинство ароматизаторов) это сам процессор, что делает проверку. ЦП хранит в одном из регистров адрес структуры данных, который определяет макет памяти («таблица страниц»), в частности, какие адреса являются читаемыми, которые могут быть доступны для записи, которые являются исполняемыми.

Когда программа пытается что-то сделать в ячейке памяти, которую не разрешает соответствующая запись в таблице страниц, ЦП генерирует исключение (прерывание), и ОС получает контроль. Дальнейшие действия зависят от ОС.

Таблица страниц поддерживается операционной системой и не является (как правило) видимой для кода пользователя. Соответствующие части в ОС зависят от оборудования.

1

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

2

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

На процессорах Intel это называется бит NX (Never Execute), а AMD вызывает бит XD (Execution Disabled).

NX бит конкретно относится к биту номер 63 (то есть самый старший бит) 64-разрядной записи в таблице страниц. Если этот бит установлен в 0, тогда код может быть выполнен с этой страницы; если установлено значение 1, код не может быть выполнен с этой страницы, и все, что там считается, считается данными.

http://en.wikipedia.org/wiki/NX_bit

Бит устанавливается в операционной системе после того, как он загружает исполняемый код в память. Он может быть установлен только привилегированным кодом (например, ОС или драйверами).

Смотрите также:

http://en.wikipedia.org/wiki/Executable_space_protection