我需要拦截Linux内核中页面错误的异常处理,但我不允许修改内核源代码并编译内核。我必须在内核模块中执行此操作。我现在有几种方法。
callq *0x2b0a07(%rip) # ffffffff81620100 <pv_irq_ops+0x30>
。do_page_fault
,但并非所有内核都配置了启用kprobe。do_page_fault
的前几个字节,跳转到我的代码。但是,我需要在我的代码中使用do_page_fault
后者。我必须将替换的指令放到另一个地方,但是x86代码的大小很难确定,如果其中一个被替换的指令是跳转的,事情会变得更复杂。你们有什么想法解决这个问题吗?
答案 0 :(得分:4)
将IDT条目更改为指向您的处理程序。如果/需要,从那里调用原始处理程序。无需复制IDT或修补现有代码。