View Single Post
Old 14-01-2005, 15:47   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Cittā: Roma
Messaggi: 15625
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine č offline   Rispondi citando il messaggio o parte di esso