1

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

4

1 回答 1

0

我在内核文档中找到了这个,所以它似乎是可行的:

更改执行路径

由于 kprobes 可以探测正在运行的内核代码,它可以更改寄存器集,包括指令指针。此操作需要非常小心,例如保持堆栈帧,恢复执行路径等。由于它在运行的内核上运行,并且需要深入了解计算机体系结构和并发计算,因此您可以轻松地踩到脚。

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

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

于 2019-04-16T08:38:16.820 回答