Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Изменение защиты

Изменение защиты

Процесс может изменить защиту, связанную с областью его виртуальной памяти, использовав системный вызов mprotect. Размер защищаемой области может быть всего в одну страницу. Поскольку ядро для осуществления защиты прав доступа зависит от аппаратного обеспечения, степень детализации защиты ограничена нижележащим оборудованием. Для области можно установить любую комбинацию прав доступа на чтение, запись и исполнение. Во многих архитектурах не различаются права доступа на чтение и исполнение; на таких архитектурах право на исполнение рассматривается как право на чтение.

Ядро реализует системный вызов mprotect, находя существующую структуру vm_map_entry или структуры, которые охватывают область, указанную при вызове. Если существующие права доступа те же самые, что и в запросе, дальнейшие действия не требуются. В противном случае новые права доступа сравниваются с максимальным значением защиты, связанным с vmjnapentry. Максимальное значение устанавливается во время вызова mmap и отражает максимальное значение, допускаемое лежащим в основе файлом. Если новые права доступа действительны, для описания новых прав доступа должны быть подготовлены одна или более структур vm_map_entry. Набор перекрывающихся условий, которые должны быть учтены, сходен с тем, который описан в предыдущем подразделе. Вместо замещения объекта, лежащего в основе новых структур vm_map_entry, эти структуры vmjnapentry по-прежнему ссылаются на тот же самый объект; различие в том, что они предоставляют ему другие права доступа.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 54 гостей онлайн

Реклама на сайте: