我正在编写一个内核模块,用于查找和解析进程的VM_EXEC页面。这可以通过遍历进程的虚拟内存来实现,类似于/proc/$PID/maps
所做的。但是,我也想将它扩展到linux内核本身,但我不知道从哪里开始。
如何枚举分配给内核的页面以及将哪些页面分配给当前运行的任何内核模块?
答案 0 :(得分:2)
要遍历内核空间的VMA,您需要使用类型为init_mm
的{{1}}变量,方法与您可能已使用mm_struct
字段的方式相同。
至于问题的第二部分,可以通过列出模块并查看字段task_struct active_mm
,module_core
和init_text_size
来区分内核代码和模块代码。 core_text_size
结构。
但是我不确定您能够区分从内核模块分配的页面和从内核分配的页面,除非您为模块提供不同版本的kmalloc(可能在链接阶段。)< / p>