我有兴趣用我将在linux内核3中实现的自定义替换系统调用。 我读到sys调用表不再暴露。
有什么想法吗?
对此http://www.linuxtopia.org/online_books/linux_kernel/linux_kernel_module_programming_2.6/x978.html示例的任何引用,但对于内核3,将不胜感激:)
谢谢!
答案 0 :(得分:6)
我建议使用kprobes进行此类工作,如果需要,可以使用内核模块轻松打破任何内核地址(或符号...)并在运行时更改执行路径(所有这些): )
Kprobes通过中断(例如x86上的int3)动态替换指令(例如,系统调用条目的第一条指令)来工作。在do_int3处理程序中,通知程序通知kprobes,kprobes又将执行传递给您的注册函数,此时您几乎可以执行任何操作。
在Documentation/kprobes.txt中给出了一个非常好的文档,所以作为samples/kprobes/kprobes_example.c中的一个小例子(在这个例子中,它们在do_fork上打破以记录系统上的每个fork)。它有一个非常简单的API,现在非常便于携带。
警告:如果您需要更改执行路径,请确保您的kprobes未经过优化(即,您的处理程序的jmp指令会替换您打破的指令而不是int3)不能轻易地改变执行(在你的功能退出之后,系统调用功能仍将照常执行)。如果您只对跟踪感兴趣,那么这很好,您可以放心地忽略这个问题。
答案 1 :(得分:1)
编写一个更好的选择LKM。你的意思是替换,你想添加一个新的。