gpt4 book ai didi

c - libbpf : Error loading ELF section . BTF:0

转载 作者:行者123 更新时间:2023-12-04 10:59:39 24 4
gpt4 key购买 nike

当我尝试执行 sudo ./mineonlyret 时,我在 ubuntu 19.04 上收到此错误消息这是加载 ebpf 程序的用户空间程序,稍后将对其进行描述。我在 ubuntu 18.04 上尝试了相同的配置,并且没有错误。哪个可能是导致此错误的原因?
如果您需要更多详细信息,请告诉我。

libbpf: Error loading ELF section .BTF: 0.

mineonlyret_user.c
// SPDX-License-Identifier: GPL-2.0
#include <stdio.h>
#include <assert.h>
#include <linux/bpf.h>
#include "libbpf.h"
#include <unistd.h>
#include <arpa/inet.h>
#include <linux/if_ether.h>

int main(int ac, char **argv)
{
int sock, prog_fd;
struct bpf_object *obj;
char filename[256];

if (bpf_prog_load("mineonlyret_kern.o", BPF_PROG_TYPE_SOCKET_FILTER,
&obj, &prog_fd))
return 1;

/* open up a packet socket */
sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
if(sock < 0){
printf("socket");
return -1;
}

/* attach the filter */
assert(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd,
sizeof(prog_fd)) == 0);

int i;
char buf[65535];
for (i = 0; i < 5; i++) {
printf("ci\n");
int res = recvfrom(sock, buf, sizeof(buf), 0, NULL, 0);
printf("res=%d\n", res);

sleep(5);
}

return 0;
}

mineonlyret_kern.c
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <linux/ip.h>
#include <linux/udp.h>
#include <linux/in.h>
#include "bpf_helpers.h"
#include <stddef.h>
SEC("socket")
int bpf_sk_prog(struct __sk_buff *skb)
{

return 0;

}
char _license[] SEC("license") = "GPL";

我编译 _kern.c
clang -S -I. -O2 -emit-llvm -c mineonlyret_kern.c -o - | llc -march=bpf -filetype=obj -o mineonlyret_kern.o

和 _user.c 与
gcc  -o mineonlyret mineonlyret_user.c -I../libbpf/src/  ../libbpf/src/libbpf.a -lelf

在这里我还有另一个疑问:为什么如果我使用库的共享版本它不起作用?我的意思是如果我执行
gcc  -o mineonlyret mineonlyret_user.c -I../libbpf/src/  -L../libbpf/src/ -lbpf

目录树
.
├── libbpf
│   ├── include
│   ├── src
│   │   ├── libbpf.so
│   │   └── libbpf.a
└── libbpfebpf
|── mineonlyret_user.c
|── mineonlyret_kern.c

最佳答案

您需要指定 -g请求 Clang 生成 .BTF(它也会生成 DWARF 调试信息,但您可以忽略或删除它,libbpf 不使用它)。虽然 .BTF 最初是用于更好的调试和 BPF 程序集转储的可选额外信息,但它已经发展成为现代 BPF 应用程序(至少那些使用 libbpf 的应用程序)非常必要的部分,因此请确保始终使用“-g”指定的。

关于c - libbpf : Error loading ELF section . BTF:0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58914021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com