我必须在不支持BTF的Linux内核上执行eBPF(linux 4.X)。我必须经常访问eBPF中的内核结构。如果没有vmlinux.h,我必须获取每个结构元素的内存偏移量。这将花费巨大的努力。我可以在eBPF程序中使用vmlinux.h头文件吗?
7gs2gvoe1#
我可以在eBPF程序中使用vmlinux.h头文件吗?是的。vmlinux.h本质上是BTF的翻译版本,通常随较新的内核一起提供。您可以使用一个名为pahole的工具为通常不随附的内核生成BTF。BTFHub项目还包括一个为大多数常用发行版预先生成的BTF文件的加载,您也许可以使用其中的一个。一旦您有了内核的BTF blob,就可以使用以下命令从中生成vmlinux.h:
$ bpftool btf dump file {path to file} format c > vmlinux.h
字符串尽管如此,您也可以使用基于内核的vmlinux.h,并使用CO:RE重新计算正确的偏移量。如果目标没有随vmlinux一起提供,加载器也可以使用相同的BTFhub blob来替换。这是该项目的最初目的。
1条答案
按热度按时间7gs2gvoe1#
我可以在eBPF程序中使用vmlinux.h头文件吗?
是的。vmlinux.h本质上是BTF的翻译版本,通常随较新的内核一起提供。您可以使用一个名为pahole的工具为通常不随附的内核生成BTF。BTFHub项目还包括一个为大多数常用发行版预先生成的BTF文件的加载,您也许可以使用其中的一个。
一旦您有了内核的BTF blob,就可以使用以下命令从中生成vmlinux.h:
字符串
尽管如此,您也可以使用基于内核的vmlinux.h,并使用CO:RE重新计算正确的偏移量。如果目标没有随vmlinux一起提供,加载器也可以使用相同的BTFhub blob来替换。这是该项目的最初目的。