如何使用kprobe监视多个系统调用

时间:2013-10-18 16:18:39

标签: linux-kernel kernel kernel-module kprobe

所以我想监视多个系统调用mkdir,fork,write,open,pipe,read,rmdir等。我已经得到了一个kprobe解决方案,可以监视单个系统调用。我这样做的第一次尝试是创建多个系统调用,如下所示:

probe[0].symbol_name = "sys_mkdir";
probe[1].symbol_name = "sys_write";
int i;
for(i = 0; i < 2; i++)
{
    probe[i].pre_handler   = sysmon_intercept_before; /* called prior to function */
    probe[i].post_handler  = sysmon_intercept_after; /* called on function return */
    probe[i].fault_handler = sysmon_intercept_fault;
    if (register_kprobe(&probe[i]))
    {
        printk(KERN_ERR MODULE_NAME "register_kprobe failed\n");
        return -EFAULT;
    }
    printk(KERN_INFO MODULE_NAME "loaded probe: %d\n",i);
}

这会导致VM崩溃所以现在我正在寻找另一种监控多个系统调用的方法。到目前为止,我唯一的想法是分叉这个过程。我知道kprobe正在设置一个寄存器,然后检查该寄存器所以我认为之前崩溃的原因是因为多个kprobe实例试图写入一个寄存器。所以分叉它似乎可能有效,因为每个系统调用监视器都有自己的内存空间(寄存器,堆,堆栈等)。任何想法将不胜感激。

0 个答案:

没有答案