【问题标题】:how to scan the system memory through program?如何通过程序扫描系统内存?
【发布时间】:2011-05-08 06:58:50
【问题描述】:

我只想读取系统内存,而不是分配给其他进程的内存,只是释放内存。 我尝试使用 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 使用地址并从中获取日期?你能推荐一些读取内存的工具吗?

【问题讨论】:

  • 系统内存是指内存吗?
  • 撇开粗略不谈,你是在用户空间还是内核空间工作?

标签: c++ c


【解决方案1】:

malloc() 本身确实不会初始化内存,但操作系统通常会在请求更多时清理它交给您的进程的内存。这是一项安全措施。

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

【讨论】:

    【解决方案2】:

    关于:

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-03
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多