gpt4 book ai didi

c - 在 Linux 内核中拦截异常处理程序的最佳做法是什么

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:55 25 4
gpt4 key购买 nike

我需要拦截linux内核中page fault的异常处理,但是不允许修改内核源码和编译内核。我必须在内核模块中执行此操作。我现在有几种方法。


  1. 复制IDT表,替换缺页ISR。但是,我查看了内核的汇编代码,发现ISR调用了一些在模块编译时无法确定地址的函数。例如,callq *0x2b0a07(%rip) # ffffffff81620100 <pv_irq_ops+0x30> .
  2. 使用kprobe/jprobe机制拦截do_page_fault ,但并非所有内核都配置为启用 kprobe。
  3. 替换do_page_fault的前几个字节带有跳转到我的代码的跳转指令。但是,我需要使用 do_page_fault后者在我的代码中。我不得不把替换指令放到另一个地方,但是 x86 代码的大小很难确定,如果替换指令之一是跳转,事情会变得更复杂。

你们有解决问题的想法吗?

最佳答案

更改 IDT 条目以指向您的处理程序。如果/需要时从那里调用原始处理程序。无需复制 IDT 或修补现有代码。

关于c - 在 Linux 内核中拦截异常处理程序的最佳做法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com