一,工具简介
urandomread工具用于演示如何在内核跟踪点进行插桩。
二,代码示例
注意,该示例要求内核版本Linux 4.7+(并在内核编译选型中使能BPF_PROG_TYPE_TRACEPOINT)。
#!/usr/bin/pythonfrom __future__ import print_function
from bcc import BPF
from bcc.utils import printb# 加载BPF程序
b = BPF(text="""
TRACEPOINT_PROBE(random, urandom_read) {// args is from /sys/kernel/debug/tracing/events/random/urandom_read/formatbpf_trace_printk("%d\\n", args->got_bits);return 0;
}
""")#打印头信息
print("%-18s %-16s %-6s %s" % ("TIME(s)", "COMM", "PID", "GOTBITS"))#格式化输出
while 1:try:(task, pid, cpu, flags, ts, msg) = b.trace_fields()except ValueError:continueexcept KeyboardInterrupt:exit()printb(b"%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))
三,运行示例
在运行该脚本前,需要另起一个终端执行下面的