我正在挂钩我的 x86 linux 内核的 IDT 条目。更具体地说,我挂钩了第 0x80 个 IDT 条目,它是系统调用中断处理程序。
如果我如下设置挂钩处理程序功能,一切都会好起来的
void my_handler(){
asm("leave\n"); // clean up stack
asm("push $0xc0504020\n"); push original handler's address
asm("ret\n");
}
但是,如果我加起来类似 printk(), current->pid ...
void my_handler(){
printk("pid : %d\n", current->pid);
asm("leave\n"); // clean up stack
asm("push $0xc0504020\n"); push original handler's address
asm("ret\n");
}
一切都冻结了。我认为这是因为我没有正确设置 fs 或 gs 段寄存器......但我不知道如何正确设置它。有人可以给我建议吗?
先感谢您。