我不瞭解mprotect使用中的'對齊分配的內存'部分。mprotect - 如何對齊多個頁面大小的作品?
我指的是在http://linux.die.net/man/2/mprotect
char *p;
char c;
/* Allocate a buffer; it will have the default
protection of PROT_READ|PROT_WRITE. */
p = malloc(1024+PAGESIZE-1);
if (!p) {
perror("Couldn't malloc(1024)");
exit(errno);
}
/* Align to a multiple of PAGESIZE, assumed to be a power of two */
p = (char *)(((int) p + PAGESIZE-1) & ~(PAGESIZE-1));
c = p[666]; /* Read; ok */
p[666] = 42; /* Write; ok */
/* Mark the buffer read-only. */
if (mprotect(p, 1024, PROT_READ)) {
perror("Couldn't mprotect");
exit(errno);
}
對於我的理解給定的代碼示例中,我試圖用16的PAGESIZE和0010爲p的地址。 由於(((int) p + PAGESIZE-1) & ~(PAGESIZE-1))
,我最終得到了0001。
你能否澄清一下這整個'對齊'是如何工作的?
謝謝,
感謝您的澄清。這肯定有幫助! – Chaitanya 2010-04-08 22:04:02