【问题标题】:Accessing /dev/mem freezes Ubuntu [closed]访问 /dev/mem 会冻结 Ubuntu [关闭]
【发布时间】:2016-09-23 09:14:03
【问题描述】:

我正在使用带有自定义内核(4.2.0-36-generic)的最新 Ubuntu Linux,其中我禁用了 CONFIG_STRICT_DEVNEM,因为我需要在项目期间转储和搜索内存中的一些术语。

但是,当使用dd if=/dev/mem 在屏幕上打印、dd if=/dev/mem of=/home/user/Documents/file.dump 将其保存为文件或dd if=/dev/mem | hexdump -C | grep 'term' 直接查找我要查找的内容时,系统会在此过程中冻结并重新启动。

我已与df -h 核对过,我的光盘有足够的可用空间。此外,在从 8Gb RAM 中写入 2.1Gb 到 2.5Gb 之后,在到达以 4 开头的地址之前(如果这些有任何区别),该过程总是停止。此外,检查/var/log/syslog/var/log/kern.log 显示冻结前没有任何相关信息。

此外,使用参数 bs=1G count=2 成功复制了前 2GB 内存,但随后尝试 bs=1G count=2 skip=2 获取下一个 2GB 再次冻结系统。

您能否提出任何解决方案,以便可以转储完整内存或其他方式直接在内存中搜索词条?

【问题讨论】:

  • Check this on unix.stackexchange.com。我认为'fmem'部分将是要走的路
  • @ppeterka 正在尝试。谢谢
  • 并行运行tail -f /var/log/kern.logtail -f /var/log/messages,看看内核在崩溃前是否输出信息。然后,在重新启动后查看这些文件。此外,change the kernel's debug level 可以更轻松地查看问题所在。考虑在unix.stackexchange.comaskubuntu.com 上提问。
  • @DiomidisSpinellis 即使将内核的调试级别更改为最高级别,在/var/log/kern.log/var/log/syslog 崩溃之前,我也找不到任何相关或打印的内容。但是,通过询问unix.stackexchange.com,我得到了answer。通过查看/var/log/kern.log 和`/proc/iomem',我发现哪些内存区域可以安全访问。谢谢。

标签: linux ubuntu memory freeze computer-forensics


【解决方案1】:

正如 ilkkachu 在unix.stackexchange.com 上的回答,我试图访问 PCI/ACPI 或某些此类硬件使用的内存区域。因此我只需要访问“安全”的内存区域。

到目前为止,我可以安全地访问(usable) 区域,如/var/log/kern.log 所示:

[    0.000000] BIOS-e820: [mem 0x0000000020200000-0x000000003fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000040000000-0x00000000401fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000040200000-0x00000000c97e8fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000c97e9000-0x00000000c9e81fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000c9e82000-0x00000000ca101fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000ca102000-0x00000000ca106fff] ACPI data
[    0.000000] BIOS-e820: [mem 0x00000000ca107000-0x00000000ca149fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000ca14a000-0x00000000cabb4fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000cabb5000-0x00000000caff1fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000caff2000-0x00000000caffffff] usable

这些区域也可以在/proc/iomem 上作为“系统 RAM”找到:

$ grep "System RAM" /proc/iomem
00001000-0009d7ff : System RAM
00100000-1fffffff : System RAM
20200000-3fffffff : System RAM
40200000-c97e8fff : System RAM

因此,我能够使用多个命令来dd这些安全内存区域,例如(对于20200000-3fffffff):

dd if=/dev/mem of=Filename bs=230467520 count=1 skip=1 ibs=1075838980

(注意ibs 比内存区域的开头高几位,bs 比它的大小小一点,因为获得了所有的“安全”区域,导致系统崩溃再次。)

更新:

更新:我可以安全地将dd 内存区域设置为“系统 RAM”、“RAM 缓冲区”和“保留”。

【讨论】:

  • 您使用的dd 参数有点奇怪。对于第一个我会使用dd if=/dev/mem of=Filename bs=4096 count=8224 skip=8224(bs = 0x1000,skip 是 0x2020,count 是 0x4000-0x2020。4000 是 0x3fff + 1)
  • 正确。使用bs=1024 ibs=1024 并通过将地址除以找到计数,我可以得到我所需要的。
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2017-07-19
  • 2014-09-04
相关资源
最近更新 更多