全部 我想知道如何在不修改linux内核的情况下替换模块中的内核静态函数。 我知道Linux hook可以替换一些函数,但是 问题是我想在不修改linux内核的情况下替换静态函数。 你能帮帮我吗? 谢谢。
答案 0 :(得分:4)
一般来说,Linux内核的编译方式,在运行时替换/挂钩静态函数是不可能的(如果您正在讨论模块代码,则无法卸载/重新加载整个模块。)
这是因为编译内联 static
在很多时候起作用(除非你把它的地址带到某个地方),因此它们甚至不会出现在符号表中。在编译之后没有办法找出生成的二进制文件中static
代码的最终位置 - 并非不太可能,你会在所有调用func的调用站点中找到它的几个内联版本。
所以基本问题:为什么函数必须是static
?你试图做的是什么,要求使用static
?
答案 1 :(得分:1)
如果它实际编译为模块(非内置),则只需重新编译代码,rmmod
模块,insmod
新.ko
文件。很容易...某种陈词滥调的糕点。
答案 2 :(得分:0)
一般情况下,您可以使用以下技巧:
int3
如果您根本不想修改内核的代码,可以设置调试寄存器并注意访问异常(当然,在异常处理程序中)。除此之外,您可以尝试查找并使一些内核的内部变量无效,以便从内核访问它们会导致无效的指针解除引用异常。在这种情况下,您可以处理此类异常并对达到目标函数执行反向跟踪。