/dev/mem、/dev/kmem和/proc/kcore有什么区别?

3

/dev/mem、/dev/kmem和/proc/kcore之间有什么区别?

我可以使用像objdump和gdb这样的工具来反汇编它的内容吗?

1个回答

7

/dev/kmem提供对内核虚拟内存空间的访问,/dev/mem提供对物理内存的访问。

/proc/kcore是一个伪文件,采用ELF core格式,表示内核的虚拟内存空间。您可以使用标准的ELF实用程序(如objdumpgdb)来检查它,但最好将其复制为常规文件并进行操作。


通俗地说,虚拟内存空间和物理内存之间有什么区别? - user567879
@user567879:虚拟内存地址空间对应于程序所看到的地址(在本例中为内核)。物理内存地址空间对应于实际放置在系统总线上的内存地址。CPU内部的MMU将虚拟地址转换为物理地址。 - caf
@caf 内核虚拟内存 实际上并没有什么意义。虚拟内存是相对于进程的,而内核不是一个进程。事实上,每个进程的虚拟内存在顶部(高地址)都包含相同的内核部分,只有在内核上下文切换后才能访问。/proc/kcore 是物理内存。 - lledr
@ysomane:我认为这是有道理的 - 正如您所指出的,每个进程的页面表的“内核”部分都是相同的,并且只能在内核模式下访问。这些是内核“看到”的地址 - 内核对象的地址是地址空间中那个恒定的内核部分的虚拟地址。/proc/kcore覆盖了内核虚拟地址空间区域,而不是物理内存 - 尽管根据内核配置,这可能包括所有物理内存的映射。 - caf
@caf 你说得对,我的观点是针对你的第一条评论,听起来好像你将内核视为某个进程。内核虚拟内存 可以被认为是当前进程虚拟空间中的内核部分。谈论_内核_ 虚拟内存 可能会有些奇怪。至于另一点,我看到的每篇文档都是关于 /proc/kcore 的物理内存... - lledr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接