Linux 内核 : what are instruction cache and mp-IRQ subsystem within a terms of function interception via replace?

标签 linux linux-kernel kernel kernel-module interception

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

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

最佳答案

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

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

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

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

关于Linux 内核 : what are instruction cache and mp-IRQ subsystem within a terms of function interception via replace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5222428/

相关文章:

linux - Sed 4.2.1 的编译问题

linux - 匹配模式并删除模式之前的 3 行以及匹配的模式行

linux - 在fuse 2.9中用什么替代fuse.ko作为内核模块

linux - Systemtap 不显示内核函数中的所有局部变量

linux - 如何从我的 Ansible playbook 检查环境变量?

linux - 生产服务器上的 NodeJS - 权限

c - libc.so.6 在 Linux 内核中的相关性

c - 不清楚的结构变量用法 - C

linux - 内核线程如何只为它们自己请求页面?

linux - 如何向task_struct添加成员绕过 "compiletime_assert"