prog_type是下列可用程序类型之一 enumbpf_prog_type{BPF_PROG_TYPE_UNSPEC,/* Reserve 0 as invalid program type */BPF_PROG_TYPE_SOCKET_FILTER,BPF_PROG_TYPE_KPROBE,BPF_PROG_TYPE_SCHED_CLS,BPF_PROG_TYPE_SCHED_ACT,BPF_PROG_TYPE_TRACEPOINT,BPF_PROG_TYPE_XDP,BPF_PROG_TYPE_PERF_EVENT,BPF_PROG_...
BPF_PROG_TYPE_SOCKET_FILTER: BPF_FUNC_skb_load_bytes() BPF_FUNC_skb_load_bytes_relative() BPF_FUNC_get_socket_cookie() BPF_FUNC_get_socket_uid() BPF_FUNC_perf_event_output() Base functions 2. kprobe程序 kprobe是动态附加到内核调用点的函数。bpf虚拟机总是确kprobe能够安全的运行,但是内核kpro...
用户态是通过系统调用来加载BPF程序到内核的,在加载程序时,需要传递的参数中有一个字段叫prog_type,这个就是BPF的程序类型,跟踪相关的是:BPF_PROG_TYPE_KPROBE和BPF_PROG_TYPE_TRACEPOINT,网络相关是:BPF_PROG_TYPE_SK_SKB、BPF_PROG_TYPE_SOCK_OPS等。下面是描述BPF程序类型的枚举结构:enum bpf_prog_typ...
用户态是通过系统调用来加载BPF程序到内核的,在加载程序时,需要传递的参数中有一个字段叫prog_type,这个就是BPF的程序类型,跟踪相关的是:BPF_PROG_TYPE_KPROBE和BPF_PROG_TYPE_TRACEPOINT,网络相关是:BPF_PROG_TYPE_SK_SKB、BPF_PROG_TYPE_SOCK_OPS等。下面是描述BPF程序类型的枚举结构: enum bpf_prog_type {...
用户态是通过系统调用来加载BPF程序到内核的,在加载程序时,需要传递的参数中有一个字段叫prog_type,这个就是BPF的程序类型,跟踪相关的是:BPF_PROG_TYPE_KPROBE和BPF_PROG_TYPE_TRACEPOINT,网络相关是:BPF_PROG_TYPE_SK_SKB、BPF_PROG_TYPE_SOCK_OPS等。下面是描述BPF程序类型的枚举结构: ...
BPF_PROG_TYPE_SOCKET_FILTER类型用于访问所有套接字处理的数据包,只能用于观测,不能修改数据包的内容或者更改目的地。 2. kprobe程序 kprobe是动态附加到内核调用点的函数。bpf虚拟机总是确kprobe能够安全的运行,但是内核kprobe被认为是不稳定的入口点,需要确定程序是否与内核相兼容。
遍历bpf程序(函数如kprobe_vfs_read)指令集合prog->insnsi[],调用build_insn进行指令的jit编译 5、还原堆栈build_epilogue 1) 当前指针减去stack_size,将是BPF fp register的地方(前面build_prologue我们报错寄存器的尾部) 2) 依次弹出刚才我们保存的寄存器,tcc、r9/r8/r7/r6、FP/LR ...
int bpf_prog1(struct __sk_buff *skb) { int index = load_byte(skb, ETH_HLEN + offsetof(struct iphdr, protocol)); long *value; if (skb->pkt_type != PACKET_OUTGOING) return 0; value = bpf_map_lookup_elem(&my_map, &index); ...
bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=2, insns=0x7fffd2d6e3c0, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0, prog_name="", prog_ifindex=0, expected_attach_type=BPF_CGROUP_INET_INGRE...
};structbpf_progs_desc{charname[256];enumbpf_prog_typetype;intmap_prog_idx;structbpf_program*prog; };staticstructbpf_progs_descprogs[] = { {"kprobe/__seccomp_filter", BPF_PROG_TYPE_KPROBE,-1,NULL}, {"kprobe/SYS__NR_read", BPF_PROG_TYPE_KPROBE, SYS__NR_read,NULL}, ...