Voltar à lista
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 2

Assinatura

int mprotect(void * addr, size_t len, int prot);

Parâmetros

ParâmetroTipoDescrição
addrvoid *Início da região, alinhado ao tamanho de página.
lensize_tTamanho da região em bytes.
protintNova proteção: combinação de PROT_READ, PROT_WRITE, PROT_EXEC, PROT_NONE.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1addrvoid *
rsiargumento 2lensize_t
rdxargumento 3protint

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.

Relacionadas

Equivalente em Windows Win32