是否可以使用kprobe更改执行路径并终止内核函数的执行?在搜索过程中,我遇到了这篇文章Replace system call in linux kernel 3 AFAIK,可以使用kprobe更改返回值,但我正在寻找的是从kprobe处理程序中有条件地终止内核函数的执行。以前有没有尝试过?谢谢!
发布于 2019-04-16 16:38:17
我在kernel docs中找到了这个,所以它看起来是可行的:
更改执行路径
由于kprobes可以探测正在运行的内核代码,因此它可以更改寄存器集,包括指令指针。此操作需要最大限度的小心,例如保留堆栈帧,恢复执行路径等。由于它在运行的内核上运行,并且需要对计算机体系结构和并发计算有深入的了解,因此您可以很容易地使用它。
如果您更改了pre_handler中的指令指针(并设置了其他相关寄存器),则必须返回!0,以便kprobes停止单步执行,只返回给定的地址。这也意味着不应该再调用post_handler。
请注意,在某些使用TOC (目录)进行函数调用的体系结构上,此操作可能会比较困难,因为您必须在模块中为您的函数设置新的TOC,并在返回后恢复旧的TOC。
https://stackoverflow.com/questions/43857748
复制相似问题