微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

libbpf:sec 'sockops':未能在偏移量 0

如何解决libbpf:sec 'sockops':未能在偏移量 0

我想使用 bpftool prog load 将我的程序加载到内核中。但是,出现了一些错误

# bpftool prog load sockmap_update_kern.o "/sys/fs/bpf/bpf_sockmap"
libbpf: sec 'sockops': Failed to find program symbol at offset 0
Error: Failed to open object file

程序通过 LLVM version 6.0.0 编译得很好

#include <linux/bpf.h>
#include "bpf_helpers.h"

struct bpf_map_def SEC("maps") sock_map = {
    .type = BPF_MAP_TYPE_SOCKMAP,.key_size = sizeof(int),.value_size = sizeof(int),.max_entries = 10,};


SEC("sockops")
int sock_map_update(struct bpf_sock_ops *ops)
{
    __u32 op,family;
    int key;
    op = ops->op;
    family = ops->family;

    switch (op){
        case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
        case BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB:
            if (family == 2){ //AF_INET
                key = 1;
                bpf_sock_map_update(ops,&sock_map,&key,BPF_ANY);
            }
        default:
            break;
    }
    return 0;
}

char _license[] SEC("license") = "GPL";
# readelf -a sockmap_update_kern.o
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement,little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Linux BPF
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          456 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         8
  Section header string table index: 1

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .strtab           STRTAB           0000000000000000  00000170
       0000000000000051  0000000000000000           0     0     1
  [ 2] .text             PROGBITS         0000000000000000  00000040
       0000000000000000  0000000000000000  AX       0     0     4
  [ 3] sockops           PROGBITS         0000000000000000  00000040
       0000000000000088  0000000000000000  AX       0     0     8
  [ 4] .relsockops       REL              0000000000000000  00000160
       0000000000000010  0000000000000010           7     3     8
  [ 5] maps              PROGBITS         0000000000000000  000000c8
       000000000000001c  0000000000000000  WA       0     0     4
  [ 6] license           PROGBITS         0000000000000000  000000e4
       0000000000000004  0000000000000000  WA       0     0     1
  [ 7] .symtab           SYMTAB           0000000000000000  000000e8
       0000000000000078  0000000000000018           1     2     8
Key to Flags:
  W (write),A (alloc),X (execute),M (merge),S (strings),I (info),L (link order),O (extra OS processing required),G (group),T (TLS),C (compressed),x (unkNown),o (OS specific),E (exclude),p (processor specific)

There are no section groups in this file.

There are no program headers in this file.

There is no dynamic section in this file.

Relocation section '.relsockops' at offset 0x160 contains 1 entry:
  Offset          Info           Type           Sym. Value    Sym. Name
000000000058  000300000001 unrecognized: 1       0000000000000000 sock_map

The decoding of unwind sections for machine type Linux BPF is not currently supported.

Symbol table '.symtab' contains 5 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000078     0 NOTYPE  LOCAL  DEFAULT    3 LBB0_3
     2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    6 _license
     3: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    5 sock_map
     4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    3 sock_map_update

No version information found in this file.

我的内核版本是 5.3.0-42。我是通过 apt-get install 得到的,所以我猜内核有一些问题。你能给我一些建议吗?提前致谢。

# uname -a
Linux iZ2zehe0r5ccv5sse5ib5fZ 5.3.0-42-generic #34~18.04.1-Ubuntu SMP Fri Feb 28 13:42:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。