如何通过程序扫描系统内存?

时间:2010-11-11 05:42:12

标签: c++ c

我只想读取系统内存,而不是为其他进程分配的内存,只是释放内存。 我尝试使用malloc分配大量内存:

char *ptr;
ptr = (char*)malloc((1024*1024*700)*sizeof(char));

我试图打印它,但它正在打印空字符(即什么都没有)。

printf("%c",ptr[i]);

所以我将它的类型转换为int,认为它可以打印出它的ascii。

printf("",(int)ptr[i]);

所有打印的值均为0.

malloc没有初始化分配的内存,是吗? 我无法打印内存。

我在linux,fedora 14,最新的gcc和带有dev-c ++的windows xp中尝试过它

我只想访问内存。是否可以通过使用地址并从中获取日期来通过Linux中的某些内核pgm?你能建议一些阅读公羊的工具吗?

2 个答案:

答案 0 :(得分:7)

malloc()本身并没有初始化内存,但操作系统 通常会在请求更多内容时对其处理的内存进行清理。这是一项安全措施。

如果您希望直接读取物理内存,可以打开/dev/mem并使用mmap()映射感兴趣的部分来实现。 /dev/mem上的权限通常会限制对root的访问权限。

答案 1 :(得分:2)

关于:

  

系统内存,而不是为其他进程分配的内存,只是空闲内存

在现代操作系统上,这没有任何实际意义,因为所有内存都是虚拟。正如caf已经说过你可以尝试扫描/proc/mem(以root用户身份),但这会给你所有的物理内存(包括当前碰巧包含其他进程数据的物理内存)并且会丢失已经交换到磁盘的数据或者通过其他支持而不是物理记忆。也许如果你澄清你想要实现的目标,你会得到更好的答案。