如何走内核的VMA?

时间:2014-09-29 20:50:07

标签: linux kernel memory

我正在编写一个内核模块,用于查找和解析进程的VM_EXEC页面。这可以通过遍历进程的虚拟内存来实现,类似于/proc/$PID/maps所做的。但是,我也想将它扩展到linux内核本身,但我不知道从哪里开始。

如何枚举分配给内核的页面以及将哪些页面分配给当前运行的任何内核模块?

1 个答案:

答案 0 :(得分:2)

要遍历内核空间的VMA,您需要使用类型为init_mm的{​​{1}}变量,方法与您可能已使用mm_struct字段的方式相同。

至于问题的第二部分,可以通过列出模块并查看字段task_struct active_mmmodule_coreinit_text_size来区分内核代码和模块代码。 core_text_size结构。

但是我不确定您能够区分从内核模块分配的页面和从内核分配的页面,除非您为模块提供不同版本的kmalloc(可能在链接阶段。)< / p>