Linux
訪問 /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 會凍結系統。您會建議任何解決方案,以便可以轉儲完整記憶體或其他方式直接在記憶體中搜尋術語嗎?
我認為您可能會遇到 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