我有兴趣将系统调用替换为将在linux内核3中实现的自定义调用。我读到sys调用表不再公开。
有什么想法吗?
除内核3外,任何对此http://www.linuxtopia.org/online_books/linux_kernel/linux_kernel_module_programming_2.6/x978.html示例的引用都将受到重视:)
谢谢!
发布于 2011-11-28 00:10:46
对于这类工作,我建议您使用kprobes,您可以很容易地中断任何内核地址(或符号...)如果需要,还可以使用内核模块在运行时更改执行路径:)
Kprobes的工作原理是动态地将指令(例如syscall条目的第一条指令)替换为中断(例如x86上的int3 )。在do_int3处理程序中,一个通知器通知kprobes,后者将执行传递给已注册的函数,从这一点起,您几乎可以执行任何操作。
在Documentation/kprobes.txt中给出了一个非常好的文档,所以用samples/kprobes/kprobes_example.c作为一个小例子(在这个例子中,他们中断do_fork来记录系统上的每个分支)。它有一个非常简单的API,而且现在非常便携。
Warning:如果你需要改变执行路径,请确保你的int3没有被优化(例如,给你的处理程序的一条jmp指令替换了你中断的指令,而不是一个kprobe),否则你将不能很容易地改变执行(在你的函数返回之后,syscall函数仍然会像往常一样执行)。如果您只对跟踪感兴趣,那么这很好,您可以安全地忽略此问题。
发布于 2011-11-27 17:36:07
写一个LKM会更好optio.What你的意思是替换,你想添加一个新的吗?
https://stackoverflow.com/questions/8280757
复制相似问题