Изменить защиту памяти
#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.
 | Если 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 системной библиотеки