Linux

訪問 /dev/mem 會凍結 Ubuntu

  • September 25, 2016

我正在使用帶有自定義核心(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 會凍結系統。

您會建議任何解決方案,以便可以轉儲完整記憶體或其他方式直接在記憶體中搜尋術語嗎?

我認為您可能會遇到 PCI/ACPI 或某些此類硬體使用的某些記憶體區域。可能存在不喜歡被訪問的記憶體映射設備。我不知道究竟是什麼地址導致了這個問題,但某些特殊區域通常位於略低於 4 GB 的限制。

在一台具有 4 GB 記憶體的機器上,核心在啟動時列印以下內容:

BIOS-e820: 0000000000000000 - 000000000009e400 (usable)
BIOS-e820: 000000000009e400 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cf690000 (usable)
BIOS-e820: 00000000cf690000 - 00000000cf6e0000 (reserved)
BIOS-e820: 00000000cf6e0000 - 00000000cf6e3000 (ACPI NVS)
BIOS-e820: 00000000cf6e3000 - 00000000cf6f0000 (ACPI data)
BIOS-e820: 00000000cf6f0000 - 00000000cf700000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)

部分可用記憶體高於 4 GB 限制,並且和0x100000000之間似乎存在漏洞。0xcf700000``0xfec00000

與“可用”記憶體相對應的區域也顯示在 中/proc/iomem,標記為“系統 RAM”。(該文件還包含有關其他記憶體區域的資訊。)僅從這些區域讀取可能會更安全。

$ grep "System RAM" /proc/iomem 
00001000-0009e3ff : System RAM
00100000-cf68ffff : System RAM
100000000-12fffffff : System RAM

引用自:https://unix.stackexchange.com/questions/312089