目录
函数原型与解释
LIBBPF_API struct bpf_program * bpf_object__next_program(const struct bpf_object *obj, struct bpf_program *prog); LIBBPF_API struct bpf_program* bpf_object__prev_program(const struct bpf_object *obj, struct bpf_program *prog);
参数说明:
- obj: 指向 bpf_object 结构的指针,通常从 bpf_prog_load() 或类似函数获得。
- prog: 指向 bpf_program 结构的指针,表示当前 BPF 程序。如果此参数为 NULL,则函数返回 BPF 对象的第一个 BPF 程序。
返回值:
- 如果有下一个&前一个 BPF 程序,函数返回指向下一个&前一个 bpf_program 结构的指针。
- 如果没有更多的 BPF 程序,函数返回 NULL。
代码demo
#include <bpf/bpf_helpers.h> #include <linux/bpf.h> SEC("kprobe/__x64_sys_getpid") int bpf_prog1(struct pt_regs *ctx) { return 0; } char _license[] SEC("license") = "GPL";
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <bpf/libbpf.h> int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s <BPF object file>\n", argv[0]); return 1; } const char *filename = argv[1]; int err; struct bpf_object *obj; err = bpf_prog_load(filename, BPF_PROG_TYPE_UNSPEC, &obj, NULL); if (err) { fprintf(stderr, "Failed to load BPF object file: %s, error: %d\n", filename, -err); return 1; } struct bpf_program *prog = NULL; while ((prog = bpf_object__next_program(obj, prog)) != NULL) { const char *prog_name = bpf_program__name(prog); printf("Found BPF program: %s\n", prog_name); } bpf_object__close(obj); return 0; }
makefile
CC = gcc CFLAGS = -Wall -O2 LDLIBS = -lbpf all: list_bpf_programs list_bpf_programs: list_bpf_programs.o clean: rm -f list_bpf_programs list_bpf_programs.o
cmake
cmake_minimum_required(VERSION 3.10) project(list_bpf_programs C) set(CMAKE_C_STANDARD 99) add_executable(list_bpf_programs main.c) target_link_libraries(list_bpf_programs bpf)
期望输出
Found BPF program: prog1 Found BPF program: prog2