SO I want to monitor multiple system calls mkdir, fork, write, open, pipe, read, rmdir, etc. I have gotten a kprobe solution to work where I can monitor a single system call. my First attempt at doing this was to create multiple system calls like so:
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);
}
this crashes the VM So now I am looking for another way to monitor multiple system calls. My only idea so far is to fork the process. I know kprobe works on setting a register and then checking that register So I assume the reason it crashed earlier was because multiple kprobe instances tried to write to a single register. So Forking it seems like it might work because every system call monitor will have its own memory space (registers, heap, stack, etc). Any ideas would be greatly appreciated.