Quote:
Originariamente inviato da anx721
Grazie,
ho capito l'esempio di mrotect+malloc, ma non ho capito a che serve mmap e come dovrei usarla al posto di malloc
|
mmap serve a "mappare qualcosa" (file, dispositivo, memoria fisica, memoria "anonima"...) nel tuo spazio di indirizzamento.
A te serve memoria "anonima".
Questo esempio č analogo a quello che trovi nella manpage, ma fa uso di mmap:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>
int main(void)
{
void *map;
char c;
char *p;
map = mmap(NULL, 1024, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
if(map==MAP_FAILED) {
perror("mmap");
return -1;
}
p = map;
c = p[666];
fprintf(stderr, "Read 1 ok c=%d\n", c);
p[666] = 42;
fprintf(stderr, "Write 1 ok\n");
if(mprotect(p, 1024, PROT_READ)) {
perror("mprotect");
return -1;
}
c = p[666];
fprintf(stderr, "Read 2 ok c=%d\n", c);
p[666] = 42;
fprintf(stderr, "Write 2 ok\n");
munmap(map, 1024);
return 0;
}
Dovresti ottenere un segfault sulla seconda write.