2

出于安全目的,如何在 Linux 中将未使用的 RAM 归零?我编写了这个简单的 C 程序,但我不知道 malloc 调用的 RAM 是否会在下一个循环中重用,或者是否会使用新的 RAM。希望几分钟后,整个 RAM 将归零。

#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char *a = NULL; // declare variable

    while(1) // infinite loop
    {
        a = malloc(524288); // half a MB
        memset(a, 0, 524288); // zero
        free(a); // free

        sleep(1); // sleep for 1 second
    }
}
4

5 回答 5

3

Linux 已经有一个内核进程使用空闲周期将内存归零,因此它将准备好将内存交给请求它的进程。

根据特定的malloc实现,您的循环可能会或可能不会将不同的内存归零。如果您真的想编写像您描述的那样的过程,请考虑sbrk直接使用以确保您将内存循环进出您的进程。我敢打赌,如果您检查一下,您会发现 by 给您的每个字节sbrk都已经为零。

于 2011-02-03T22:00:28.757 回答
1

您不能将系统 RAM 归零。系统拥有它。如果您想运行一个将 RAM 归零的系统,那么您需要编写自己的操作系统!

于 2011-02-03T21:59:51.680 回答
1

只要你从不访问未初始化的内存,你就不必担心别人留下了什么。只要您在将其归零之前从未释放内存,您就不必担心留下了什么。

于 2011-02-03T22:02:07.127 回答
0

通常,在我的系统(2.6.36)上,我可以通过执行一段时间(1)malloc()来释放所有未使用(但已分配)的内存;循环,并在它停止分配内存时杀死它。

于 2011-07-15T16:59:02.460 回答
0

我认为您需要编写一个内核模块才能真正可靠地做到这一点。然后你仍然只能将未使用的页面归零。请注意,其他进程使用的页面将在分配时由内核自动清除。

你想做什么?避免冷启动攻击?

于 2011-02-03T22:00:36.883 回答