我正在編寫一個內核模塊,用於查找和分析進程的VM_EXEC頁面。這可以通過走過程的虛擬內存來實現,類似於/proc/$PID/maps
所做的那樣。不過,我也想把它擴展到linux內核本身,但我不知道從哪裏開始。如何走內核的VMA?
我該如何枚舉哪些頁面分配給內核以及哪些頁面分配給當前正在運行的任何內核模塊?
我正在編寫一個內核模塊,用於查找和分析進程的VM_EXEC頁面。這可以通過走過程的虛擬內存來實現,類似於/proc/$PID/maps
所做的那樣。不過,我也想把它擴展到linux內核本身,但我不知道從哪裏開始。如何走內核的VMA?
我該如何枚舉哪些頁面分配給內核以及哪些頁面分配給當前正在運行的任何內核模塊?
要走內核空間的VMA,您需要使用mm_struct
類型的init_mm
變量,其方式與task_struct active_mm
字段可能已在處理的相同。
至於它可以通過列出的模塊和看字段module_core
,init_text_size
和module
結構的core_text_size
是可能的內核代碼和代碼模塊區分的問題的第二部分。
但我不知道,你將能夠從一個內核模塊分配的頁面以及那些從內核分配的,除非你提供不同版本的kmalloc的模塊來區分(可能在鏈接階段。)
關於第一部分,'init_mm'有一個'.mmap'成員,但它似乎總是NULL。有沒有其他方法可以獲得內核內存的VMA? – MarkP 2014-10-06 15:56:14
嗯我會期望它被使用。暫時還不知道你在哪裏可以找到它。 – 2014-10-06 16:11:36
也許這會更好的堆棧溢出? – Torger597 2014-09-29 21:08:15
@ Torger597確實,編程問題在這裏是無關緊要的。 – Gilles 2014-09-29 23:15:38