3

システム コール カウンターを実装しようとしています。その結果、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
4

1 に答える 1