Linux x86_64Memória#10
mprotect
Altera as permissões de acesso (leitura/escrita/execução) de uma região de memória já mapeada.
Descrição
Usada, por exemplo, para implementar guard pages (regiões PROT_NONE que disparam SIGSEGV se acessadas, detectando estouro de pilha/buffer) e para marcar código JIT como executável somente depois de escrito (W^X).
Header:
sys/mman.hman 2Assinatura
int mprotect(void * addr, size_t len, int prot);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| addr | void * | Início da região, alinhado ao tamanho de página. |
| len | size_t | Tamanho da região em bytes. |
| prot | int | Nova proteção: combinação de PROT_READ, PROT_WRITE, PROT_EXEC, PROT_NONE. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | addrvoid * |
| rsi | argumento 2 | lensize_t |
| rdx | argumento 3 | protint |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.