mprotect()

Изменить защиту памяти

Прототип:

#include <sys/mman.h>
int mprotect( void *addr,
size_t len,
int prot );

Аргументы:

addr
Начало диапазона адресов, защиту которых необходимо изменить.
len
Длина диапазона адресов в байтах.
prot
Новые возможности доступа к мапированным областям памяти. Вы можете комбинировать следующие биты, которые определены в <sys/mman.h>:
PROT_EXEC
для области памяти разрешено выполнение.
PROT_NOCACHE
отключить кэширование области памяти (например, для доступа к двухпортовой памяти).
PROT_NONE
доступ к области памяти невозможен.
PROT_READ
для области памяти разрешено чтение.
PROT_WRITE
для области памяти разрешена запись.

Библиотека:

libc

Описание:

Функция mprotect() изменяет параметры защиты доступа для любых мапирований области памяти в диапазоне, начинающемся с адреса, заданного параметром addr, и размером len байт.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.


Note: Если mprotect() завершается ошибкой, параметры защиты могут оказаться измененными для некоторых страниц в диапазоне адресов, начинающемся с addr и размером len байт.

Коды ошибок:

EACCES
Объект памяти не был открыт для чтения, независимо от указанных параметров защиты. Объект памяти не был открыт для записи, а PROT_WRITE был указан для мапирования в режиме MAP_SHARED.
EAGAIN
Параметр prot содержит PROT_WRITE в то время, как мапирование произведено в режиме MAP_PRIVATE, и ресурсов памяти, которая должна быть зарезервирована для блокировки эксклюзивных для данного процесса страниц, недостаточно (при необходимости).
ENOMEM
Адреса в диапазоне, начинающемся с адреса addr и размером len байт, находятся за пределами диапазона, разрешённого для адресного пространства процесса, или диапазон содержит одну или несколько страниц, которые не смапированы. Параметр prot содержит флаг PROT_WRITE в то время, как мапирование произведено в режиме MAP_PRIVATE, и для блокировки эксклюзивных для данного процесса страниц может потребоваться больше пространства, чем система может предоставить для этого.
ENOSYS
Функция mprotect() не поддерживается в этой реализации.

Классификация:

POSIX 1003.1 Memory Protection

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

mmap(), munmap(), shm_open(), shm_unlink()




Предыдущий раздел: Описание API системной библиотеки