bpf_func_id是如何产生的? 作者 pengdonglin137@163.com 正文 以libbpf-bootstrap中的一个测试程序minimal.bpf.c为例。 下面是minimal.bpf.c的源码: minimal.bpf.c // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* Copyright (c) 2020 Facebook */ #include<linux/bpf.h> #include<bpf/bpf_...
后来为了解决反汇编字节码时可以显示实际的函数名,添加了__BPF_FUNC_MAPPER,这样可以方便地根据枚举值得到函数名: commit ebb676daa1a340ccef25eb769aefc09b79c01f8aAuthor: Thomas Graf <tgraf@suug.ch>Date: Thu Oct 27 11:23:51 2016 +0200bpf: Print function name in addition to function idThe ver...
| func = btf_type_by_id(desc_btf, func_id); | func_name = btf_name_by_offset(desc_btf, func->name_off); | addr = kallsyms_lookup_name(func_name); | desc->func_id = func_id; | desc->imm = BPF_CAST_CALL(addr) - __bpf_call_base; | } |**>do_check | |-->check_k...
就是BPF_call id,id就是bpf_func_id中的id; 进一步就是BPF_EMIT_CALL(func name) 例如,在内核中的某一处代码,调用bpf_map_lookup_elem,在BPF指令集编程中,就是使用BPF_EMIT_CALL来调用的 不难想象,我们调用bpf_trace_printk也是采用同样的调用方式 BPF_EMIT_CALL(func name)是如何转化成字节码的呢? _bpf...
bpf_call 123是伪汇编的表示,并不是真正的BPF指令,它对应的真正的BPF指令为BPF_EMIT_CALL(FUNC)。 可以看到BPF_EMIT_CALL BPF指令宏调用了内核辅助函BPF_FUNC_map_lookup_elem。 我们就可以理解FUNC其实就是BPF辅助函数的id号。 我们前面那两个宏展开以后得到的枚举类型。说func谁对应的枚举类型里面的某个整型值...
就是BPF_call id,id就是bpf_func_id中的id; 进一步就是BPF_EMIT_CALL(func name) 例如,在内核中的某一处代码,调用bpf_map_lookup_elem,在BPF指令集编程中,就是使用BPF_EMIT_CALL来调用的 不难想象,我们调用bpf_trace_printk也是采用同样的调用方式 ...
我的 bcc 工具可以作为代码示例,另外我还贡献了用 Python 开发 bcc 工具的教程。 我建议先学习 bcc 的 multi-tools,因为在需要编写新工具之前,你可能会从里面获得很多经验。 您可以从它们的 bcc 存储库funccount,funclatency,funcslower,stackcount,trace,argdist的示例文件中研究 bcc。
func_id != BPF_FUNC_msg_redirect_hash) goto error; break; case BPF_MAP_TYPE_REUSEPORT_SOCKARRAY: if (func_id != BPF_FUNC_sk_select_reuseport) goto error; break; default: break; } @@ -2217,6 +2222,10 @@ static int check_map_func_compatibility(struct bpf_verifier_env *env, if...
1.2.3、BPF_FUNC_map_lookup_elem 1.3、objpin 1.3.1、bpf_obj_pin() 1.3.2、bpf_obj_get() 2、Tracing类型的BPF程序 2.1、bpf程序的绑定 2.2、bpf程序的执行 3、Filter类型的BPF程序 BPF的字面上意思Berkeley Packet Filter意味着它是从包过滤而来。如果在开始前对BPF缺乏感性的认识建议先看一下参考文档:...
case BPF_FUNC_redirect: return &bpf_redirect_proto; default: return sk_filter_func_proto(func_id); }1 change: 1 addition & 0 deletions 1 net/sched/act_bpf.c Original file line numberDiff line numberDiff line change @@ -72,6 +72,7 @@ static int tcf_bpf(struct sk_buff *skb, co...