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