【发布时间】:2013-03-24 09:36:56
【问题描述】:
我需要动态分配一些内存部分,每个部分都有一些保护 - RW 或 RX。
我尝试通过malloc分配内存,但mprotect总是返回-1 Invalid argument。
我的示例代码:
void *x = malloc(getpagesize());
mprotect(x, getpagesize(), PROT_READ); // returns -1, it;s sample, so only R, not RW or RX
【问题讨论】:
-
你得到的
errno是什么?如果返回 -1,则将相应地设置errno。 Here 是手册页。 -
@gongzhitaao 22: EINVAL
-
嗯,根据手册页,EINVAL 的意思是“addr 不是一个有效的指针,或者不是系统页面大小的倍数。”。
malloc不保证对齐,你应该使用类似posix_memalign的东西。 -
将 malloc 的分配标记为 READONLY 也会将同一页面上的所有其他内存位标记为 READONLY,这可能会混淆您的程序位和可能存在堆分配的运行时当他们尝试写入内存时,他们已经合法地 malloc 了