Linux-Kernel

跟隨核心模組執行文件

  • October 19, 2017

我目前正在做一些使用系統呼叫掛鉤和日誌來保護核心的項目……現在我已經完成了掛鉤讀取和套接字系統呼叫,當我嘗試用 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,它遵循類似的模式,但涉及的語義稍微多一些。

引用自:https://unix.stackexchange.com/questions/399039