首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试bpf和bpf jit

调试bpf和bpf jit
EN

Stack Overflow用户
提问于 2021-01-31 15:34:43
回答 1查看 463关注 0票数 2

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

如何将在qemu环境中生成的抖动输出传递给bpf_jit_disasm?我已经尝试过-f,但它期望有一个JIT映像。不知道那是什么意思。

另外,我还可以调试bpf程序的其他方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-01 12:22:25

bpf_jit_enable设置为2时,程序的JIT映像应该打印到成功的程序加载的内核日志中。您应该能够简单地将它从内核日志复制到一个文件中,并将该文件提供给bpf_jit_disasm

例如,编辑:

代码语言:javascript
复制
# 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

复制粘贴..。

代码语言:javascript
复制
$ 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程序的方法,尽管我不确定这些工具是否可以在一个繁忙的机器上使用:

对象文件上的

  • llvm-objdump (-S|-d) <object file> (但仅针对eBPF字节码,您将不会获得JIT-ed image)
  • bpftool prog dump (jited|xlated) <prog ref> (详见man bpftool-prog )

)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65980937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档