i look up <Advanced Linux Programming> and come to something like this:
size_t page_size = getpagesize ();
int fd = open ("/dev/zero", O_RDONLY);
char* memory = (char*)mmap (NULL, page_size * 3, PROT_READ | PROT_WRITE,MAP_PRIVATE, fd, 0);
close (fd);
mprotect (memory, page_size, PROT_READ);
mprotect (memory + page_size*2, page_size, PROT_READ);
memory[0] = 1; // SIGSEGV
memory[page_size] = 1; // OK
memory[page_size*2-1] = 1; // OK
memory[page_size*2] = 1; // SIGSEGV
|