1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
.\" -*- nroff -*-
.\"
.\" Copyright (C) 1995 Michael Shields <shields@tembel.org>.
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date. The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein. The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and author of this work.
.\"
.\" Traduction 12/10/1996 Christophe BLAESS (ccb@club-internet.fr)
.\" Mise a Jour 3/06/97
.TH MPROTECT 2 "3 Juin 1997" "Linux 2.0" "Manuel du programmeur Linux"
.SH NOM
mprotect \- Contrler les autorisations d'accs une partie de la mmoire.
.SH SYNOPSIS
.nf
.B #include <sys/mman.h>
.sp
\fBint mprotect(const void *\fIaddr\fB, size_t *\fIlen\fB, int \fIprot\fB);
.fi
.SH DESCRIPTION
.B mprotect
contrle la manire d'accder une portion de la mmoire. Si un
accs interdit se produit, le programme reoit un signal
.BR SIGSEGV.
.PP
.I prot
est un OU binaire ( | ) entre les valeurs suivantes
.TP 0.8i
.B PROT_NONE
On ne peut pas accder du tout la zone de mmoire.
.TP
.B PROT_READ
On peut lire la zone de mmoire.
.TP
.B PROT_WRITE
On peut crire dans la zone de mmoire.
.TP
.B PROT_EXEC
La zone de mmoire peut contenir du code excutable.
.PP
La nouvelle protection remplace toute autre protection prcdente.
Par exemple, si la mmoire a t marque prcdemment \fBPROT_READ\fR,
et si l'on appelle \fBmprotect\fR avec \fBPROT_WRITE\fR, la zone
concerne ne sera plus lisible.
.SH "VALEUR RENVOYE"
.B mprotect
renvoie 0 si il russit, ou \-1 s'il choue, auquel cas
.I errno
contient le code d'erreur.
.SH ERREURS
.TP 0.8i
.B EINVAL
\fIaddr\fR n'est pas un pointeur valide, ou ce n'est pas un multiple de
PAGESIZE.
.TP
.B EFAULT
La mmoire n'est pas accessible.
.TP
.B EACCES
L'accs spcifi n'est pas possible sur ce type de mmoire. Ceci
se produit par exemple si vous utilisez
.BR mmap (2)
pour reprsenter un fichier en lecture\-seule en mmoire, et
si vous demandez de marquer cette zone avec
.BR PROT_WRITE.
.TP
.B ENOMEM
Pas assez de mmoire pour le noyau
.SH "EXEMPLE D'UTILISATION"
.nf
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/mman.h>
#include <limits.h> /* pour avoir PAGESIZE */
#ifndef PAGESIZE
#define PAGESIZE 4096
#endif
int
main(void)
{
char *p;
char c;
/* Allocation d'un buffer, protection
par dfaut PROT_READ|PROT_WRITE. */
p = malloc(1024 + PAGESIZE - 1);
if (!p) {
perror("Impossible d'allouer suffisament de mmoire");
exit(errno);
}
/*
* Aligner p sur un multiple de PAGESIZE (que l'on suppose tre
* une puissance de 2)
*/
p = (char *) (((int) p + PAGESIZE-1) & ~(PAGESIZE-1));
c = p[666]; /* lecture ok */
p[666] = 42; /* ecriture ok */
/* Buffer marqu en lecture-seule */
if (mprotect(p, 1024, PROT_READ)) {
perror("Impossible d'utiliser mprotect");
exit(errno);
}
c = p[666]; /* lecture ok */
p[666] = 42; /* ecriture, fin du programme avec SIGSEGV */
exit(0);
}
.fi
.SH CONFORMIT
SVr4, POSIX.1b (anciennement POSIX.4). SVr4 dfinit un code d'erreur
EAGAIN supplmentaire. Les conditions d'erreur SVr4 ne correspondent pas
tout fait celles de Linux.
POSIX.1B prcise que
.B mprotect
ne peut tre utilis que sur des zones de mmoire obtenues avec
.BR mmap (2).
.SH "VOIR AUSSI"
.BR mmap (2)
.SH TRADUCTION
Christophe Blaess, 1997.
|