从最近几天开始,我试图了解/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
字符设备的一些有用信息吗?
答案 0 :(得分:1)
有人可以列出或分享有关dev / kmem char设备的一些有用信息吗?
/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地址100
中读取第一个0
个字节。换句话说,如果你将执行:
open("/dev/kmem");
seek(0);
read(100);
您将从100
- virtual address
读取0
字节,该字节由系统的内存管理单元映射到某个物理RAM地址(例如{{1}对于0x01000000
,您可以使用:
x86_64
在您的设备上。
我认为大多数cat /proc/iomem | grep "Kernel code"
设备对于security研究从内核视图查看流程非常有用,我认为还有其他一些重要问题你无法做到。这个天没有/dev/kmem
解决。