eBPF 可以调用动态库吗?

Can eBPF call dynamic libraries?

是否可以编写一个可以动态调用外部库的 eBPF 程序? IE。假设这个特定的库存在于运行 eBPF 代码的主机上。

现在我不在乎程序是否通过验证,而是是否可以在字节码中表达这一点。应该假设外部函数没有嵌入到 ELF 二进制文件中。

不,目前无法做到。

加载并附加后,eBPF 程序可以调用:

  • 来自同一程序的 eBPF 函数(eBPF 到 eBPF 函数调用)
  • 其他 eBPF 程序,在特定条件下,通过尾调用
  • BPF_PROG_TYPE_EXT
  • 类型的其他 eBPF 程序
  • 内核函数助手(内核中定义的函数库)
  • 随机内核函数,如果它们被显式标记为可调用(应该在 Linux 5.13 中)

它无法从用户 space 库中调用函数。