c - 使用可加载内核模块替换内核函数

标签 c linux linux-kernel

我正在尝试用内核模块替换内核函数,并遇到了 kmm 提出的以下解决方案( https://stackoverflow.com/a/1242232/6438341 )

但是,内核似乎不允许将任何内容复制到“real_printk”的地址。内核提示:“BUG:无法处理 ffffffff81774863 处的内核分页请求”,其中 ffffffff81774863 是在 System.map 或/proc/kallsyms 中找到的 printk 的地址。

有谁知道怎么解决吗?

最佳答案

据猜测,我想说这可能是因为您正在运行一个对其文本页进行写保护的内核。在修改这些页面之前,您需要将它们设置为可写。

但是,请记住,您正在查看的答案已经有六年了。自发布以来,已经出现了许多更好的实时内核修补方法,包括 kpatch , SUSE Live Patching ,和KernelCare 。 (下面还有 ftrace ,可用于动态检测函数。)在尝试从头开始构建自己的修补解决方案之前,您应该仔细查看这些内容。

关于c - 使用可加载内核模块替换内核函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37693504/

相关文章:

C 中的编译时运算符

linux - 如何使用 while 循环和 if 语句编写单行 shell 脚本

linux - 如何在 Linux 中打印处理器的一个特定核心上列出的所有进程?

c - 应用程序代码如何与内核代码通信?

c - 当单词出现在日志中时运行命令?

c - fwrite 和 fprintf 不能在 c 中工作

c - 跳到时间量子结束

linux - grep命令搜索

c++ - list.h list_del() 给出内核分页错误

linux - 如何在我的 LKM 和 Linux 内核之间同步共享数据结构?