跟隨核心模組執行文件
我目前正在做一些使用系統呼叫掛鉤和日誌來保護核心的項目……現在我已經完成了掛鉤讀取和套接字系統呼叫,當我嘗試用 execve 做同樣的事情時(跟隨哪個文件剛剛執行)我得到一個核心操作或者我做錯了什麼,因為我什至無法打開 dmesg 來查看我有什麼錯誤(dmesg 也是可執行的,我只是覆蓋了執行執行檔的功能)。我還發現有一個叫做 stub_execve 的東西,你不能只從系統呼叫表中更改系統呼叫,因為有些系統呼叫用另一個二進製文件或類似的東西包裝(如果我錯了,請修復我)。所以最後,我需要做的就是看看什麼文件剛剛執行,我需要通過核心模組來做,有沒有人想到怎麼做,或者如何跳過 stub_execve 或類似的東西..?請幫助我,我將非常感激。
你調查過
kprobes
嗎?或者俱體來說jprobes
。使用 jprobe 您可以掛鉤
execve
(或任何其他核心函式),在該函式執行之前檢查其參數等。它的工作方式是,呼叫者提供一個與它想要跟踪的函式具有相同簽名的函式,並通過呼叫來註冊它jprobe_register
。讓我們呼叫那個函式my_execve
。然後就在執行實際函式之前,核心首先將其所有上下文(參數、寄存器值等)保存在堆棧上並將控制權傳遞給my_execve
,並傳入該上下文的副本。當my_execve
返回時(使用jprobe_return
而不是return
),核心為原始函式恢復保存的上下文execve
並恢復執行。這意味著您對上下文所做的任何更改都不會影響原始函式的執行。你可以在這裡看到一個例子:https://github.com/bytefire/esct/blob/master/esct.c.相反,如果您想操作上下文,例如更改寄存器中的值,則使用
kprobes
,它遵循類似的模式,但涉及的語義稍微多一些。