在不深入了解 为什么 的细节的情况下,我正在寻找一种干净的(尽可能)的方法来替换可加载模块中的内核函数和系统调用。我最初的想法是编写一些代码来覆盖某些功能,这些功能将采用原始功能(可能的话, 调用 该功能),然后添加一些自己的代码。关键是我编写的函数必须具有原始函数的名称,因此其他代码在尝试访问它时将改为访问我的函数。
通过将代码放入适当的函数中,我可以轻松地(相对地)直接在内核中执行此操作,但是我想知道是否有人知道一点C魔术,但 不一定 是可以实现该目标的可怕的内核(或C)编码实践同样的结果。
我想到了#defines和typedef的想法,但我无法完全理解。
简而言之:有人知道一种有效地覆盖Linux内核中的功能(从模块)的方法吗?
编辑:由于被问到,我本质上是想 从内核中 记录某些功能(创建/删除目录等),但是出于理智的考虑,可加载模块似乎很有意义,而不是必须编写一个大补丁内核代码,并在每次更改时重新编译。可以向内核中添加最少的代码是可以的,但是我想将大部分工作卸载到模块上。
我意识到这个问题已有3年了,但是对于其他试图做这种事情的人来说,内核有一个名为kprobes的接口可以执行您需要的操作。