eBPF 程序的转换、加载与调用详解
1. 转换后的字节码
bytes_xlated 字段能告知我们“转换后”的 eBPF 代码的字节数。这是 eBPF 代码通过验证器(可能还会因某些原因被内核修改)后的字节码。
我们可以使用 bpftool 来查看“Hello World”代码转换后的版本:
$ bpftool prog dump xlated name hello
int hello(struct xdp_md * ctx):
; bpf_printk("Hello World %d", counter);
0: (18) r6 = map[id:165][0]+0
2: (61) r3 = *(u32 *)(r6 +0)
3: (18) r1 = map[id:166][0]+0
5: (b7) r2 = 15
6: (85) call bpf_trace_printk#-78032
; counter++;
7: (61) r1 = *(u32 *)(r6 +0)
8: (07) r1 += 1
9: (63) *(u32 *)(r6 +0) = r1
; return XDP_PASS;
10: (b7) r0 = 2
11: (95) exit
这与之前 llvm - objdump 输出的反汇编代码非常相似。偏移地址相同,指令也类似,例如偏移 5 处的指令是 r2 = 15 。
eBPF程序转换与调用详解
超级会员免费看
订阅专栏 解锁全文
59

被折叠的 条评论
为什么被折叠?



