我正在使用Debian挤压并注意到内存始终为零。这是在Linux发行版中的新功能吗?前一段时间,我相信我可以使用puts()并输出垃圾。内核零内存?
我多次运行这个测试程序,但评论结果总是相同的。 (我在sysctl.conf的randomize_va_space = 2,所以我知道,内存在不同的地点是在每次运行使用。)
char *a = malloc(50000000);
a[49999999] = '\0';
puts(a); // it outputs nothing since all are zeroes
printf("%p\n", a);
if(a[5000] == '\0') // this condition is always true
{
puts("It is a nul char.");
}
是否有可能使系统不为零的内存?这个Debian挤压安装有什么选择可以激活这个始终为零的内存?
根据这个WP页面上的brk/sbrk函数:http://en.wikipedia.org/wiki/Sbrk你是对的。但是这对于内核来说似乎是一件非常浪费的事情。 – 2011-05-14 21:29:57
为什么?这对于一个程序来说似乎是一件聪明的事情。如果你有非常愚蠢的程序来保存未加密的愚蠢数据,然后在没有免费()的情况下死掉,你可能会编写一个程序来利用它。我很肯定你可以在编译内核时禁用它。 – 2011-05-14 23:12:11
“禁用它”?绝对没有办法通过普通选项向内核泄露数据给用户空间。你不得不故意破坏它来做到这一点。由于新页面是COW引用零页面的事实,因此不存在会泄漏的“缺省情况”。 – 2011-05-15 03:43:09