【问题标题】:ebpf: intercepting function callsebpf:拦截函数调用
【发布时间】:2018-08-25 10:39:07
【问题描述】:

我正在阅读有关kprobes BPF 程序类型的信息,我想知道是否有可能不仅拦截函数调用以进行跟踪或收集一些低级信息(寄存器、堆栈等),而且 替换调用并执行而不是实际函数?

kprobe 是否提供此功能或者我正在寻找错误的工具?

【问题讨论】:

  • 您也可以看看Ftrace 以及它是如何在Livepatch 中用于替换内核函数的。

标签: linux-kernel system-calls bpf kprobe ebpf


【解决方案1】:

不,kprobes BPF 程序只能读取系统调用参数和返回值,它们不能修改寄存器,因此不能拦截函数调用。这是 BPF 验证器施加的限制。

内核模块可以使用 kprobes 拦截函数调用。

【讨论】:

  • 感谢您的反馈!所以我猜kernel.org/doc/Documentation/kprobes.txt 是起点。
  • 是的。您可能也对this StackOverflow answer 感兴趣。
  • 嗯,是的,可以在 kprobe 的预处理程序中更改 IP 寄存器,以将执行重定向到您的函数而不是原来的函数,但是,我也会看看 Ftrace,它可以也可以用来代替函数。也许,这可能更容易使用,但这是一个品味问题。事实上,live patching 已经使用 Ftrace 做到了这一点。
  • 今天这不准确。 eBPF 中的“uprobes”功能并不完全如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2013-12-17
  • 2018-04-17
相关资源
最近更新 更多