我尝试挂钩系统调用 sys_wait4 ,每次我尝试执行 rmmod 来模块内核时都会崩溃。
这是我的代码。
void **sys_call_table;//pointer for the system call's table
typedef asmlinkage long (*sys)( struct pt_regs * );
sys wait_dos;//save the original system call sys_wait4
//Function init
asmlinkage long hooked_wait(struct pt_regs *param)
{
printk("hello world\n");
return wait_dos(param);
}
//Functiom exit
static int lkm_example_init(void)
{
write_cr0(read_cr0()&(~ 0x10000));
sys_call_table = (void*)kallsyms_lookup_name("sys_call_table");
wait_dos = sys_call_table[__NR_wait4];
sys_call_table[__NR_wait4] = hooked_wait;
write_cr0(read_cr0() | 0X10000);
return 0;
}
static void lkm_example_exit(void)
{
write_cr0(read_cr0()&(~ 0x10000));
sys_call_table[__NR_wait4] =wait_dos;
write_cr0(read_cr0() | 0X10000);
}
module_init(lkm_example_init);
module_exit(lkm_example_exit);
MODULE_LICENSE("GPL");
我也面临着类似的问题。我想知道你是如何解决这个问题的。