一,工具简介

urandomread工具用于演示如何在内核跟踪点进行插桩。

二,代码示例

注意,该示例要求内核版本Linux 4.7+(并在内核编译选型中使能BPF_PROG_TYPE_TRACEPOINT)。

#!/usr/bin/python

from __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/format
    bpf_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:
        continue
    except KeyboardInterrupt:
        exit()
    printb(b"%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))

三,运行示例

在运行该脚本前,需要另起一个终端执行下面的

02-19 04:21