作者回复: 非常棒的答案,赞一个👍
作者回复: 从最终部署的角度来看是的,但对入门者来说BCC更简单一些
作者回复: 这个文件的内容不是自动生成的,跟C语言一样,头文件用来放类型定义和常量定义。 文件的源码见 https://github.com/feiskyer/ebpf-apps/blob/main/bpf-apps/execsnoop.h
作者回复: 这是依赖库没有安装导致的,请参考README的步骤安装依赖库
作者回复: 有时候命令名跟syscall名字不是一致的,比如chmod命令很可能使用的是fchmodat而不是chmod系统调用
作者回复: 看起来是验证器认为它是一个无界的变量,你的内核版本和BCC版本是什么?
作者回复: 这是一个封装后的函数,使用起来更简单(当然直接用bpf_object__load也是没问题的)。
作者回复: 有没有引入头文件?完整的程序可以参考Github: https://github.com/feiskyer/ebpf-apps/blob/main/bcc-apps/python/execsnoop.c#L2-L4。
作者回复: 1. eBPF程序是在内核空间执行,可以在内核空间获得进程的上下文信息。 2. 这些具体的步骤可以参考 https://github.com/libbpf/libbpf。比如,https://github.com/libbpf/libbpf/blob/master/src/libbpf.c#L8599-L8675 这儿定义了所有不同程序类型所对应的 SEC 名称及挂载方式。
作者回复: 如果内核也支持BTF的话,理论上应该是可以运行的;但如果内核版本比较旧的话,可能不支持BTF,这时候可以使用条件编译的方式,为旧版本内核关闭BTF。