movabsq rdi, 64bit_addr_of_struct_bpf_prog // unused if bpf stats are offmov rsi, rbx // prog start timecall __bpf_prog_exit // rcu_read_unlock, preempt_enable and stats mathmov rax, qword ptr [rbp - 8] // 将eth_type_trans函数的返回值放到rax寄存器中,作为TRAMPOLINE的返回值pop ...
Libbpf + BPF_PROG_TYPE_TRACING 方式: pid_t pid = task->pid; 将该功能与BPF CO-RE配合使用,可以支持可移植(即可重定位)的字段读取,此时需要将此代码封装到编译器内置的__builtin_preserve_access_index中 BPF_PROG_TYPE_TRACING + BPF CO-RE 方式: pid_t pid = __builtin_preserve_access_index(({...
libbpf没有 BCC 的代码重写魔法(code-rewriting magic),但提供了几种其他方式来 实现同样的目的。 方式二:libbpf+BPF_PROG_TYPE_TRACING(不可移植) 如果使用的是最近新加的BTF_PROG_TYPE_TRACING类型 BPF 程序,那校验器已经足够智 能了,能原生地理解和记录 BTF 类型、跟踪指针,直接(安全地)读取内核内存, 代码语...
_PROG_TYPE_LWT_SEG6LOCAL, 182 BPF_PROG_TYPE_LIRC_MODE2, 183 BPF_PROG_TYPE_SK_REUSEPORT, 184 BPF_PROG_TYPE_FLOW_DISSECTOR, 185 BPF_PROG_TYPE_CGROUP_SYSCTL, 186 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, 187 BPF_PROG_TYPE_CGROUP_SOCKOPT, 188 BPF_PROG_TYPE_TRACING, 189 BPF_PROG_TYPE_...
如果使用的内核版本还没支持 BPF_PROG_TYPE_TRACING,就必须显式地使用 bpf_probe_read() 来读取字段。 Non-CO-RE libbpf 方式: pid_t pid; bpf_probe_read(&pid, sizeof(pid), &task->pid); 1. 2. 有了CO-RE+libbpf,我们有两种方式实现这个目的。
内核在packet filter和tracing等应用中提供了一系列的钩子来运行BPF代码。目前支持以下类型的BPF代码: static int __init register_kprobe_prog_ops(void){bpf_register_prog_type(&kprobe_tl);bpf_register_prog_type(&tracepoint_tl);bpf_register_prog_type(&perf_event_tl);return 0;}static int __init re...
prog_type域表示程序将运行的上下文;它包括那些数据和辅助函数可供程序使用。BPF_PROG_TYPE_SOCKET用于使用socket的程序,BPF_PROG_TYPE_TRACING用于跟踪过滤器。程序的大小(以指令数衡量)由insn_cnt标识,insns域这个指针则指向程序本身。license域这个指针指向许可的描述信息,它未来可以用于限制非GPL程序的功能。
首先需要编译出BPF程序, 这里调用了助手函数bpf_trace_printk, 这会向内核追踪日志中写入消息, 可以通过读取/sys/kernel/debug/tracing/trace_pipe获取输出 //clang -O2 -target bpf -c ./prog.c -o ./prog.o#include<linux/bpf.h>staticint(*bpf_trace_printk)(constchar*fmt,intfmt_size, ...)= (vo...
内核在packet filter和tracing等应用中提供了一系列的钩子来运行BPF代码。目前支持以下类型的BPF代码: static int __init register_kprobe_prog_ops(void){bpf_register_prog_type(&kprobe_tl);bpf_register_prog_type(&tracepoint_tl);bpf_register_prog_type(&perf_event_tl);return 0;} ...
183 BPF_PROG_TYPE_SK_REUSEPORT, 184 BPF_PROG_TYPE_FLOW_DISSECTOR, 185 BPF_PROG_TYPE_CGROUP_SYSCTL, 186 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, 187 BPF_PROG_TYPE_CGROUP_SOCKOPT, 188 BPF_PROG_TYPE_TRACING, 189 BPF_PROG_TYPE_STRUCT_OPS, 190 BPF_PROG_TYPE_EXT, 191 BPF_PROG_TYPE_LSM, ...