0

所以我想监控多个系统调用 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 实例试图写入单个寄存器。因此,Forking 似乎可行,因为每个系统调用监视器都有自己的内存空间(寄存器、堆、堆栈等)。任何想法将不胜感激。

4

0 回答 0