我可以访问 BCC(BPF 编译器集合)生成的中间 C 代码吗?

Can I access the intermediate C code generated by BCC (BPF Compiler Collection)?

我正在开发使用 BCC 进行内核跟踪的 eBPF 程序。一旦我在 运行 我的代码时收到以下错误消息:

/virtual/main.c:16:36: error: member reference type 'struct Qdisc *' is a pointer; did you mean to use '->'?
    bpf_trace_printk("%ld\n", qdisc.limit);    
                              ~~~~~^

我知道我的代码有什么问题,而且很容易改正。但我注意到有一个名为 /virtual/main.c 的文件。我想 BCC 将传递给 Python 中的 BPF 对象的原始 C 代码转换为存储在名为 /virtual/main.c 的文件中的中间 C 代码。然后通过ClangLLVM将中间C代码编译成BPF字节码,最终将BPF代码hook到内核中。

不知我的猜测是否正确。如果是,有什么办法可以看到存储在 /virtual/main.c 中的中间代码?我想知道 BCC 对我原来的代码做了什么修改。

非常感谢!

您可以通过将 DEBUG_PREPROCESSOR 传递给 BPF() 调用来告诉 bcc 转储重写的 C 代码。

BPF(..., debug=DEBUG_PREPROCESSOR)