Linux 内核模块编程 - 挂钩 sys_wait4 系统调用

问题描述 投票:0回答:1

我尝试挂钩系统调用 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"); 
c kernel kernel-module
1个回答
0
投票

我也面临着类似的问题。我想知道你是如何解决这个问题的。

© www.soinside.com 2019 - 2024. All rights reserved.