是否可以使用kprobe更改执行路径并终止内核函数执行?在搜索时,我发现了这篇文章Replace system call in linux kernel 3 AFAIK,可以使用kretprobe更改返回值,但我正在寻找的是从kprobe处理程序中有条件地终止内核函数执行。这是否曾经尝试过?谢谢!
答案 0 :(得分:0)
我在kernel docs中发现了这一点,因此似乎可行:
更改执行路径
由于kprobes可以探查正在运行的内核代码,因此它可以更改 寄存器集,包括指令指针。此操作需要 最大限度地注意,例如保持堆栈框架,恢复 执行路径等。由于它在运行中的内核上运行且需要 对计算机体系结构和并发计算有深入的了解, 可以轻松射出你的脚。
如果更改指令指针(并设置其他相关指令 寄存器)在pre_handler中,您必须返回!0,以便kprobes停止 单步执行,仅返回给定地址。这也意味着 post_handler不应该再被调用。
请注意,在某些使用以下架构的体系结构上,此操作可能会更困难 函数调用的目录(目录),因为您必须设置一个 在模块中使用新的目录功能,并恢复旧的目录 从它回来后。