在Linux中使用C实现零RAM
为了安全起见,如何将Linux中未使用的RAM归零?我写了这个简单的C程序,但我不知道malloc调用的RAM是否会在下一个循环中重用,或者是否会使用新的RAM。希望在几分钟后,整个RAM都已归零在Linux中使用C实现零RAM,c,linux,ram,C,Linux,Ram,为了安全起见,如何将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) /
#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
}
}
#包括
#包括
#包括
内部主(空)
{
char*a=NULL;//声明变量
while(1)//无限循环
{
a=malloc(524288);//半MB
memset(a,0524288);//零
免费的;免费的
睡眠(1);//睡眠1秒
}
}
您不能将系统RAM归零。系统拥有它。如果你想运行一个将RAM归零的系统,那么你需要编写自己的操作系统 Linux已经有了一个内核进程,它使用空闲周期将内存归零,这样它就可以将内存交给请求它的进程
根据特定的
malloc
实现,您的循环可能为零,也可能不为零。如果您真的想编写您描述的流程,请直接使用sbrk
,以确保在流程中循环内存。我打赌如果你检查一下,你会发现sbrk提供给你的每个字节都已经是零了。我认为你需要编写一个内核模块来可靠地完成这项工作。然后,您仍然只能将未使用的页面归零。请注意,其他进程使用的页面将在分配时由内核自动清除
你想干什么?避免冷启动攻击?只要你从不访问未初始化的内存,你就不必担心别人留下了什么。只要在归零之前从不释放内存,就不必担心留下了什么。通常,在我的系统(2.6.36)上,我只需执行一段时间(1)malloc(),就可以释放所有未使用(但已分配)的内存;循环,并在它停止分配内存时终止它
sbrk
将始终为您提供零个初始化页面。我不知道Linux会这样做。你能提供一份推荐信吗?