我很惊讶地读到零页可以在x86和某些架构映射。至少在Solaris上的情况下,他有一个通过映射零页面进行利用的例子。这基本上是memset的地址零。是否可以映射零页或将地址零写入?
在我的理解地址0和周围的人建立专门被访问,至少在窗口保护。但我不能肯定这一点,所以我写了一些代码,自己here
#include <stdio.h>
#include <string.h>
int main(void) {
// your code goes here
void* mem = (void*)-1;
memset(mem, 0x00, 4*1024);
return 0;
}
正如预期的那样,至少在ideone,它崩溃。真的有映射零页的情况吗?
所以Windows和其它操作系统不允许它呢? – zinking
不幸的是我不知道细节。我已经看到了它残酷地固定(如:绝不允许)在两个不同的操作系统和听到别人在做怪黑客的传闻。但我没有比这更多的细节。你必须研究你的特定操作系统来找出它所做的和不允许的。 – Art