使用kprobes更改内核执行路径

时间:2017-05-08 21:46:08

标签: kprobe

是否可以使用kprobe更改执行路径并终止内核函数执行?在搜索时,我发现了这篇文章Replace system call in linux kernel 3 AFAIK,可以使用kretprobe更改返回值,但我正在寻找的是从kprobe处理程序中有条件地终止内核函数执行。这是否曾经尝试过?谢谢!

1 个答案:

答案 0 :(得分:0)

我在kernel docs中发现了这一点,因此似乎可行:

  

更改执行路径

     

由于kprobes可以探查正在运行的内核代码,因此它可以更改   寄存器集,包括指令指针。此操作需要   最大限度地注意,例如保持堆栈框架,恢复   执行路径等。由于它在运行中的内核上运行且需要   对计算机体系结构和并发计算有深入的了解,   可以轻松射出你的脚。

     

如果更改指令指针(并设置其他相关指令   寄存器)在pre_handler中,您必须返回!0,以便kprobes停止   单步执行,仅返回给定地址。这也意味着   post_handler不应该再被调用。

     

请注意,在某些使用以下架构的体系结构上,此操作可能会更困难   函数调用的目录(目录),因为您必须设置一个   在模块中使用新的目录功能,并恢复旧的目录   从它回来后。