2

我想用堆栈中的地址过滤我的 ebpf,例如,如果堆栈跟踪包含_do_fork然后写入映射的地址。

我看到这个https://www.kernel.org/doc/html/latest/bpf/bpf_design_QA.html#q-can-bpf-programs-access-stack-pointer说不可能获得地址。但我也看到了这个https://www.spinics.net/lists/netdev/msg497159.html “bpf 程序能够看到所有堆栈跟踪,然后可以进行内核处理或通过将堆栈跟踪发送到用户空间”。所以我很困惑。最后一个问题是如果可能的话,我们如何使用 bpf_get_stack 获取内核中的堆栈跟踪地址?

提前致谢

4

1 回答 1

1

可以访问堆栈跟踪。

您提到的第一个链接(bpf_design_QA)不是指被跟踪的程序,它处理执行跟踪操作时 BPF 程序本身使用的堆栈指针。但正如提交日志中提到的bpf_get_stack(),您可以访问堆栈。

有一些关于 BPF 帮助器的文档,例如bpf_get_stack()在线可用。您可能也想看看使用它的代码示例

我自己在跟踪堆栈方面没有太多经验,但似乎很少有这样做的工具实际上正在使用这个bpf_get_stack()助手。相反,来自 bcc 之类的工具或来自( , ) 之profile类的内核示例的工具通常使用堆栈跟踪映射 ( ),因此您可能也想看看这个(bcc 甚至为它们提供了特定的 API)。offwaketimeBPF sideuser space sideBPF_MAP_TYPE_STACK_TRACE

于 2019-07-30T09:58:30.457 回答