我正在尝试实现一个系统调用计数器,因此我在 task_struct 中包含了一个 int 值,并在一个单独的文件中包含了一个递增它的函数。这个函数应该在它实际调用所需的 sys_call 之前从 system_call 调用(我有理由在之前而不是之后调用它)。但是,如果我把它放在 sys_call 之前,那么在编译和启动之后就会出现内核恐慌(“试图杀死 init_idle”),如果我把它放在 sys_call 之后,它就可以工作。有什么区别,我该如何克服?
这是相关代码
ENTRY(system_call)
pushl %eax # save orig_eax
SAVE_ALL
GET_CURRENT(%ebx)
testb $0x02,tsk_ptrace(%ebx) # PT_TRACESYS
jne tracesys
cmpl $(NR_syscalls),%eax
jae badsys
call update_counter /*This causes a kernel panic*/
call *SYMBOL_NAME(sys_call_table)(,%eax,4)
movl %eax,EAX(%esp) # save the return value