首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用kprobe更改内核执行路径

使用kprobe更改内核执行路径
EN

Stack Overflow用户
提问于 2017-05-09 05:46:08
回答 1查看 279关注 0票数 1

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

EN

回答 1

Stack Overflow用户

发布于 2019-04-16 16:38:17

我在kernel docs中找到了这个,所以它看起来是可行的:

更改执行路径

由于kprobes可以探测正在运行的内核代码,因此它可以更改寄存器集,包括指令指针。此操作需要最大限度的小心,例如保留堆栈帧,恢复执行路径等。由于它在运行的内核上运行,并且需要对计算机体系结构和并发计算有深入的了解,因此您可以很容易地使用它。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43857748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档