当我想将ebpf程序加载到内核中时,为什么要得到这个错误??
ebpf_prog.c.c:
#include
#include
int main(int argc, char **argv) {
struct bpf_object *obj;
int map_fd, prog_fd;
int i, sock;
FILE *f;
if (bpf_prog_load("ebpf_prog.o", BPF_PROG_TYPE_SOCKET_FILTER, &obj, &prog_fd)){
printf("The kernel didn't load the BPF program\n");
return -1;
}
return 0;
}加载程序c:
#include
#include
#include
int main(int argc, char **argv) {
struct bpf_object *obj;
int map_fd, prog_fd;
int i, sock;
FILE *f;
if (bpf_prog_load("ebpf_prog.o", BPF_PROG_TYPE_SOCKET_FILTER, &obj, &prog_fd)){
printf("The kernel didn't load the BPF program\n");
return -1;
}
return 0;
}错误:
$ gcc ebpf_prog.c -c -o ebpf_prog.o
$ gcc load_prog.c -o load_prog -lbpf
$ ./load_prog
libbpf: elf: sock_example.o is not a valid eBPF object file
The kernel didn't load the BPF program我的密码怎么了??
发布于 2021-05-12 13:25:18
您的load_prog.c将sock_example.o引用为包含BPF程序的对象文件,但该对象文件实际上称为ebpf_prog.o。
发布于 2021-05-12 13:25:36
您的ebpf_prog.c不是一个有效的eBPF程序,但这可能只是一个复制粘贴错误,因为它与load_prog.c几乎相同。(我假设ebpf_prog.o/sock_example.o不匹配也是复制粘贴错误。)
主要错误是将其构建为ELF二进制文件;eBPF程序需要构建为eBPF字节码:
clang -target bpf ...既然您使用的是libbpf,请参见libbpf引导教程。
https://unix.stackexchange.com/questions/649377
复制相似问题