訪問 /dev/mem 會凍結 Ubuntu

訪問 /dev/mem 會凍結 Ubuntu

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

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

答案1

我認為您可能會遇到 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之間似乎存在漏洞。0xcf7000000xfec00000

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

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

相關內容