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