用Linux内核中的模块覆盖功能

没有深入了解为什么,我正在寻找一种干净(尽可能)的方式来替换来自可加载模块的内核函数和系统调用。 我最初的想法是编写一些代码来覆盖一些函数,这些函数将采用原始函数(也许,如果可能的话,调用函数),然后添加一些我自己的代码。 关键是我写的函数必须具有原始函数的名称,所以其他代码在尝试访问它时将访问我的代码。

我可以很容易地(相对)直接在内核中执行此操作,只需将我的代码放入适当的函数中即可,但是我想知道是否有人知道一点点C魔法并不一定是可怕的内核(或C)编码实践,相同的结果。

想到#defines和typedefs的想法,但我无法在我的脑海中发现它。

简而言之:有没有人知道一种有效覆盖Linux内核(来自模块)的函数的方法?

编辑:由于它被问到,我基本上想要从内核中记录某些函数(创建/删除目录等),但出于理智的缘故,一个可加载的模块似乎有意义,而不必写一个大的补丁内核代码并在每次更改时重新编译。 向内核添加最少量的代码是可以的,但我想将大部分工作卸载到模块中。


我意识到这个问题已经有三年了,但是为了其他人试图做这种事情的好处,内核有一个名为kprobes的接口来完成你所需要的。


您可能希望挂钩系统调用(PDF链接),这将有效地让您记录调用内核函数的用户进程。 如果你真的想记录核心功能的内核使用,你想看看内核功能跟踪。


我不完全相信我明白你想做什么,但我认为ksplice可能是一个很好的解决方案。 它仍在开发中,所以我不知道它现在是否处于任何可用状态。

链接地址: http://www.djcxy.com/p/87875.html

上一篇: Overriding functionality with modules in Linux kernel

下一篇: Thread local data in linux kernel module