Linux内核:什么是指令缓存和mp-IRQ子系统在功能拦截中通过替换?

时间:2011-03-07 16:46:27

标签: linux linux-kernel kernel kernel-module interception

我正在尝试实现内核函数拦截(使用this old method替换System.map的指向函数的指针(c)Silvio);根据{{​​3}},一些可能的缺陷可能与指令缓存和mp-IRQ源有关,在拦截后不会刷新/更新。

在这种情况下,这些子系统是什么以及如何处理它们?

1 个答案:

答案 0 :(得分:2)

指令缓存不是Linux内核子系统 - 它是CPU的一部分。

从主内存中获取代码需要花费大量时间,因此CPU使用缓存来缓存代码段。这是指令缓存,其中包含CPU有理由相信将很快需要的指令(代码)副本。

如果更改内存中的指令(代码),如所提到的示例那样,但不刷新指令缓存,则更改的代码可能会神秘地无法运行,直到指令缓存条目持有的某个随机时间点你被替换的指令被清除。

mp-IRQ是多处理器中断的缩写。与此相关的问题是,在SMP(多CPU或多核)系统上,构建跟踪点的代码可能在一个CPU上运行,而另一个正在执行它。为了安全地处理这个问题,你需要完成同步CPU的非常复杂的任务,以确保你试图修补的代码没有被中断用在其他CPU上。