繁体   English   中英

调试 bpf 和 bpf jit

[英]Debugging bpf and bpf jit

我写了一些 bpf 程序。 我启用了echo "2" > /proc/sys/net/core/bpf_jit_enable所以它在日志中输出生成的 jitted 代码,但是我在生成 jitted 代码的 qemu 环境中没有bpf_jit_disasm qemu 环境只有busybox,没有其他工具。

如何将 qemu 环境中生成的 jitted output 传递给bpf_jit_disasm 我试过-f但它需要一个 JIT IMAGE。 不确定那是什么意思。

还有什么其他方法可以调试 bpf 程序?

bpf_jit_enable设置为 2,程序的 JIT-ed 图像应在成功加载程序时打印到 kernel 日志。 您应该能够简单地将其从 kernel 日志复制粘贴到一个文件中,并将该文件提供给bpf_jit_disasm

[编辑] 例如:

# echo 2 > /proc/sys/net/core/bpf_jit_enable
# cat /proc/sys/net/core/bpf_jit_enable
2
# bpftool prog load sample_ret0.o /sys/fs/bpf/foo type kprobe
# dmesg
[...]
[5244802.925533] bpf_jit_enable = 2 was set! NEVER use this in production, only for JIT debugging!
[5244815.524017] flen=133 proglen=678 pass=5 image=0000000000000000 from=sshd pid=1398988
[5244815.618778] JIT code: 00000000: 0f 1f 44 00 00 55 48 89 e5 53 41 55 31 c0 45 31
[5244815.708419] JIT code: 00000010: ed 48 89 fb 8b 43 04 be 3e 00 00 c0 48 39 f0 74
[5244815.797957] JIT code: 00000020: 07 31 c0 41 5d 5b c9 c3 8b 43 00 48 83 f8 06 75
...
[5244911.371176] JIT code: 000002a0: c0 e9 7d fd ff ff

复制粘贴...

$ cat sample_ret0.jit.txt
[5244815.524017] flen=133 proglen=678 pass=5 image=0000000000000000 from=sshd pid=1398988
[5244815.618778] JIT code: 00000000: 0f 1f 44 00 00 55 48 89 e5 53 41 55 31 c0 45 31
[5244815.708419] JIT code: 00000010: ed 48 89 fb 8b 43 04 be 3e 00 00 c0 48 39 f0 74
[5244815.797957] JIT code: 00000020: 07 31 c0 41 5d 5b c9 c3 8b 43 00 48 83 f8 06 75
...
[5244911.371176] JIT code: 000002a0: c0 e9 7d fd ff ff

$ wc sample_ret0.jit.txt
  148  2779 12521 sample_ret0.jit.txt

$ bpf_jit_disasm -f sample_ret0.jit.txt
15 bytes emitted from JIT compiler (pass:3, flen:2)
ffffffffc10077f8 + <x>:
   0:   jmpq   0xfffffffffffffed3
   5:   cmp    $0x60,%rax
   9:   jne    0x0000000000000015
   b:   .byte 0xb8
   c:   add    %al,(%rax)
   e:   .byte 0xff

还有其他几种方法可以检查 eBPF 程序,尽管我不确定这些工具是否可以在 busybox 上使用:

  • object 文件上的llvm-objdump (-S|-d) <object file> (但仅适用于 eBPF 字节码,您不会获得 JIT-ed 图像)
  • bpftool prog dump (jited|xlated) <prog ref> (详见man bpftool-prog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM