我正在使用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