通过bcc 使用ebpf

通过前一篇博文知道要使用ebpf debug kernel还是相当麻烦的,github 上有个项目
https://github.com/iovisor/bcc 可以简化ebpf的操作,应为kernel space已经支持ebpf,所以这个项目主要集中在user space部分的编写,user space 可以通过各种语言编写,这里以python为例.
下面的代码的是在调用sys_clone的时候调用hello 函数来输出Hello, World


#!/usr/bin/env python
#
# This is a Hello World example that formats output as fields.

from bcc import BPF

# define BPF program
定义处理函数
prog = """
int hello(void *ctx) {
    bpf_trace_printk("Hello, World!\\n");
    return 0;
}
"""

# load BPF program
加载BPF 加载hello
b = BPF(text=prog)
指定调用sys_clone时候对应的回调函数是hello
b.attach_kprobe(event="sys_clone", fn_name="hello")

# header
print("%-18s %-16s %-6s %s" % ("TIME(s)", "COMM", "PID", "MESSAGE"))

# format output
监听并输出log
while 1:
    try:
        (task, pid, cpu, flags, ts, msg) = b.trace_fields()
    except ValueError:
        continue
    print("%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值