В общем, Я знаю, что процесс не может записывать в память (в пространстве адресов), которая имеет защиту, которая не позволяет писать. Но что проверяет, может ли этот процесс? Проводит ли какая-либо инструкция по сборке через операционную систему? как это работает?Защита памяти на ОС
ответ
В большинстве современных процессоров (Intel x86, ARM большинство ароматизаторов) это сам процессор, что делает проверку. ЦП хранит в одном из регистров адрес структуры данных, который определяет макет памяти («таблица страниц»), в частности, какие адреса являются читаемыми, которые могут быть доступны для записи, которые являются исполняемыми.
Когда программа пытается что-то сделать в ячейке памяти, которую не разрешает соответствующая запись в таблице страниц, ЦП генерирует исключение (прерывание), и ОС получает контроль. Дальнейшие действия зависят от ОС.
Таблица страниц поддерживается операционной системой и не является (как правило) видимой для кода пользователя. Соответствующие части в ОС зависят от оборудования.
Таблицы страниц, они имеют всю информацию для пространства памяти текущего исполняемого процесса. Когда вы пытаетесь получить доступ к памяти, которая либо считывается только путем записи на нее, либо доступа к памяти, которая не принадлежит вам, процессор не находит сопоставление (или видит, что вы не можете его записать), и выдает ошибку страницы в ОС , Затем ОС решает, является ли это копией на странице записи, если страница, к которой вы обращались, принадлежит вам вообще, но еще не была сопоставлена, или если вы просто получили доступ к плохим пространствам и обрабатываете ее соответственно (обычно убивает процесс с помощью segfault если вы попадаете в плохое пространство).
Если это поддерживается на оборудовании, обычно в информации, описывающей блок выделенной памяти, указывается бит, указывающий, может ли выполняться блок памяти.
На процессорах Intel это называется бит NX (Never Execute), а AMD вызывает бит XD (Execution Disabled).
NX бит конкретно относится к биту номер 63 (то есть самый старший бит) 64-разрядной записи в таблице страниц. Если этот бит установлен в 0, тогда код может быть выполнен с этой страницы; если установлено значение 1, код не может быть выполнен с этой страницы, и все, что там считается, считается данными.
http://en.wikipedia.org/wiki/NX_bit
Бит устанавливается в операционной системе после того, как он загружает исполняемый код в память. Он может быть установлен только привилегированным кодом (например, ОС или драйверами).
Смотрите также: