簡體   English   中英

內核模塊中的內核符號

[英]kernel symbols in kernel module

首先,我需要知道System.map/proc/kallsyms中的地址是虛擬的還是物理的? 然后我想從內核符號的地址讀取,例如我想讀取init_task符號的pid字段。 我可以從System.map找到init_task地址,也可以找到pid偏移量。 但我不知道如何從內核中的地址讀取。 我非常感謝任何參考或鏈接來詳細說明事情,因為我不熟悉內核編程。

另一個問題:當他們說DKOM (動態內核對象操作)是什么意思? 我搜索但只是找到一些關於Windows系統的東西!

當他們說你可以在LKM訪問exported symbols時? 他們的意思是什么? 是從內核符號讀取還是寫入的特定函數?

您可以看到的任何指針地址都是虛擬的。 它既可以是用戶空間進程虛擬空間(即您的進程),也可以是內核虛擬地址空間。 只有當內核需要通知一個硬件組件如何訪問另一個硬件組件時,它才會將指針轉換為物理表示。

值得注意的是,事件物理地址空間是虛擬的,因為不同的硬件組件是實際分配的內存范圍,並且當它們被尋址時,預計會做出反應。 從某種意義上講,它仍然是非常物理的,這些地址值是在BUS地址上編碼的地址值,不需要軟件轉換。

至於從用戶空間讀/寫內核指針。 除非由用戶和內核(如共享內存)通過特定API授予和設置,否則您不能 它是蝕刻到操作系統核心的最基本的安全保護。 (你甚至無法訪問其他用戶的內存)。

話雖如此,如果你想故意降低你的內核安全性,你可以做任何事情,包括加載一個那樣做的模塊......

這是關於同一主題的另一個討論: 如何訪問內核空間來自用戶空間-linux

首先, System.map/proc/kallsyms中的地址是虛擬地址。

其次,如果您想在內核中遍歷數據結構,可以使用Crash工具 它基於gdb,易於使用。 但是您應該首先使用調試信息重新編譯內核。 使用崩潰工具,您可以輕松讀取用戶空間中內核的每個數據結構。 它支持多種發行版,如Ubuntu,Fedora等。

另一個工具是Volatility ,由Python編寫,您可以拍攝系統的快照。 然后用Volatility讀取內存快照。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM