【问题标题】:Alter kernel execution path using kprobes使用 kprobes 更改内核执行路径
【发布时间】:2017-10-07 01:15:23
【问题描述】:

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

【问题讨论】:

    标签: kprobe


    【解决方案1】:

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

    更改执行路径

    由于 kprobes 可以探测正在运行的内核代码,它可以改变 寄存器集,包括指令指针。该操作需要 最大的关心,如保持堆栈帧,恢复 执行路径等。因为它在一个正在运行的内核上运行并且需要 对计算机体系结构和并发计算有深入的了解,你 可以轻松射中你的脚。

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

    请注意,在某些使用 函数调用的 TOC(目录),因为您必须设置一个 为您的模块中的函数创建新的 TOC,并恢复旧的 从那里回来后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 2015-09-25
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多