替代mprotect()

mprotect系统调用保护页面边界内的内存区域:

int mprotect(void *addr, size_t len, int prot); 

这里len应该是pagesize的倍数。

有没有办法只保护几个连续的地址,这些地址没有与页面边界对齐,即len < pagesize

我不这么认为,不。 这个限制是因为MMU对它可以控制的粒度有多么精确。 有些表保存访问限制,每个字节不能有表槽; 表本身会使用你所有的RAM。 因此,它变得更粗糙,每个页面都有表条目。

如果你在Linux上,你可以使用Valgrind做一些事情。

不,没有。 您的操作系统的虚拟内存系统仅在页面级别上运行,不会小于该级别。

我认为以下链接是你所期望的,但你必须等待它才能发布。

https://software.intel.com/en-us/blogs/2013/07/22/intel-memory-protection-extensions-intel-mpx-support-in-the-gnu-toolchain

“MPX – 英特尔®内存保护扩展”是所有C ++程序员都想要的。 我非常期待。