2015-06-06 93 views
1

從過去的幾天裏,我試圖瞭解/dev/mem/dev/kmem設備之間準確的區別。從不同的來源,我只知道當我們嘗試從這些設備讀取read_mem()read_kmem() API時分別被調用。Linux中/ dev/kmem char設備的真實用途是什麼?

read_mem(): reads the *physical* memory 
read_mem(): reads the *virtual* memory as seen by the kernel. 

我渴望知道什麼是/dev/kmem的唯一目的,在什麼使用情況,我們可以利用這一點。 regdump/dev/mem有用的一個示例。但找不到/dev/kmem的用處。

可有人列表或共享有關dev/kmem字符設備一些有用的信息?

回答

1

可有人列表或共享有關開發/ kmem的字符設備一些有用的信息?

/dev/kmem/dev/mem設備包含與您的RAM相同的信息。但你可以在閱讀man kmem

The file kmem is the same as mem, except that the kernel virtual memory 
rather than physical memory is accessed. 

這意味着/dev/kmem提供相同的信息/dev/mem但因爲它由Linux內核看到。例如,如果你將執行執行這樣的事情:

open("/dev/mem"); 
seek(0); 
read(100); 

你會從RAM地址0讀第一100字節。在其他的方式,如果你將執行:

open("/dev/kmem"); 
seek(0); 
read(100); 

您將從virtual address100字節 - 0,這是由系統的內存管理單元映射到一些物理內存地址(例如0x01000000x86_64,你可以與發現:

cat /proc/iomem | grep "Kernel code"

您的設備上

我認爲最。 LY的/dev/kmem設備可以是有益的security研究,工藝目光從核心觀點,我不認爲有,你不能沒有/dev/kmem這天解決其他重要問題。

+0

'貓的/ dev/kmem'導致內核崩潰在我的系統(arch64)。當我查看更多細節時,我發現panic()是由於'copy_to_user()'試圖推崇'0'地址。 –