2016-09-19 482 views
0

我指的是: http://www-users.cs.umn.edu/~boutcher/kprobes/kprobes.txt.html以瞭解kprobe。我使用了doc中給出的kprobe_example.c。insmod:錯誤:無法插入模塊kprobe_example.ko:不允許操作

我使用生成文件(即在同一文檔拍攝代碼)

我得到的編譯錯誤,因爲我的內核版本是4.2,有些領域在結構pt_regs被改變編譯它。因此,我用ip和eflag替換了eipg,並在kprobe_example.c中標記爲https://gist.github.com/murlee417/87c2eb43a6afa1954b05404a07813e81。然後我能夠成功編譯它。現在

,作爲根用戶,我所做的:

#insmod kprobe_example.ko 

和我:

insmod: ERROR: could not insert module kprobe_example.ko: Operation not permitted 

我的消息緩衝區有:

#dmesg 
[ 4537.478408] Couldn't find do_fork to plant kprobe 

請幫我解決這個錯誤,並使insmod工作。

+0

'我得到了編譯錯誤,因爲我的內核版本是4.2,有些領域在結構pt_regs.'被改變 - 不僅是單個結構被改變。 [函數'do_fork'的定義](http://lxr.free-electrons.com/source/kernel/fork.c?v=4.2#L1753)與配置宏* HAVE_COPY_THREAD_TLS *相關。可能這個宏是爲你的情況定義的(檢查內核構建目錄下的'.config'文件),所以這個函數根本不存在。如果是這種情況,只需更改函數的名稱以進行探測。 – Tsyvarev

+0

我用do_mkdir替換了do_fork,並且能夠解決該錯誤。將來,我會一直在尋找內核版本的內核函數。非常感謝Tsyvarev。 – Murali

回答

0

在86 do_fork()被稱爲sys_fork(),所以更改代碼如下

/* For each probe you need to allocate a kprobe structure */ 
static struct kprobe kp = { 
    //.symbol_name = "do_fork", 
    .symbol_name = "sys_fork", 
};