我正在尝试用可加载模块替换linux内核系统调用(sys_read)并使用kprobes。
所以,在handler_pre中我用一个函数指针替换regs-> ip值,我想调用它,然后我调用reset_current_kprobe
:
static int handler_pre(struct kprobe *p, struct pt_regs *regs)
{
printk(KERN_INFO "pre_handler: p->addr = 0x%p, ip = %lx,"
" flags = 0x%lx\n",
p->addr, regs->ip, regs->flags);
regs->ip = (unsigned long)&my_sys_read;
reset_current_kprobe();
return 1;
}
但是当我尝试使用insmod
导入我的模块时,出现以下错误:Unknown symbol current_kprobe (err 0)
如果我不调用reset_current_kprobe
,当我调用被替换的函数时,我在fault_handler中遇到一个异常,其中陷阱号为14
我正在使用linux版本4.3.0-rc4,我用qemu
测试它谢谢!