从最近几天开始,我试图了解 /dev/mem
和 /dev/kmem
设备之间的确切区别。从不同的来源,我唯一知道的是,当我们尝试从这些设备读取时,分别调用了 read_mem()
和 read_kmem()
API。
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
字符设备的有用信息吗?
最佳答案
can someone list or share some useful information regarding the dev/kmem char device?
/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);
您将从虚拟地址
- 0
读取100
字节,它由系统的内存管理单元映射到某个物理RAM 地址(例如 0x01000000
用于 x86_64
,您可以通过以下方式找到它:
cat/proc/iomem | grep "内核代码"
在您的设备上。
我认为/dev/kmem
设备对security 很有用。研究从内核的角度来看进程,我认为目前没有 /dev/kmem
就无法解决其他重要问题。
关于android - linux 中/dev/kmem char 设备的真正用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30680152/