是否可以使用 kprobe 更改执行路径并终止内核函数执行?在搜索时,我遇到了这篇文章Replace system call in linux kernel 3 AFAIK,可以使用 kretprobe 更改返回值,但我正在寻找的是有条件地从 kprobe 处理程序中终止内核函数执行。这个以前试过吗?谢谢!
问问题
317 次
1 回答
0
我在内核文档中找到了这个,所以它似乎是可行的:
更改执行路径
由于 kprobes 可以探测正在运行的内核代码,它可以更改寄存器集,包括指令指针。此操作需要非常小心,例如保持堆栈帧,恢复执行路径等。由于它在运行的内核上运行,并且需要深入了解计算机体系结构和并发计算,因此您可以轻松地踩到脚。
如果您更改 pre_handler 中的指令指针(并设置其他相关寄存器),则必须返回 !0 以便 kprobes 停止单步执行并返回给定地址。这也意味着不应再调用 post_handler。
请注意,在某些使用 TOC(目录)进行函数调用的架构上,此操作可能会更难,因为您必须在模块中为您的函数设置一个新的 TOC,并在从它返回后恢复旧的 TOC。
于 2019-04-16T08:38:16.820 回答