我正在尝试用内核模块替换内核函数,并遇到了 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/