#!/usr/bin/env python
# Copyright (c) PLUMgrid, Inc.
# Licensed under the Apache License, Version 2.0 (the "License")
# run in project examples directory with:
# sudo ./hello_world.py"
# see trace_fields.py for a longer example
from bcc import BPF
BPF(text='int kprobe__sys_clone(void *ctx) { bpf_trace_printk("Hello, World!\\n"); return 0; }').trace_print()
#end
运行这个python 文件 可以看到类似下面的log.
# ./examples/hello_world.py
bash-13364 [002] d... 24573433.052937: : Hello, World!
bash-13364 [003] d... 24573436.642808: : Hello, World!
[...]
这个python 文件是第一个hello world的ebpf的程序,当用户调用sys_clone 这个系统调用的时候就会
调用kprobe__sys_clone。而这个函数就通过bpf_trace_printk 打印hello world.
这个程序中的知识点如下:
1:text='...' 会定义一个函数,这个函数是用c 语言写的
2:kprobe__sys_clone:这个从函数必须用kprobe__ 开头,后面跟需要最终的函数,例如这里要追踪的函数是
sys_clone()这个系统调用.
3: bpf_trace_printk 用于简单的打印log,例如这里就打印一个字符串
4: trace_print 会从trace_pipe 中读取log,这样我们才能看到通过bpf_trace_printk 打印的log
#!/usr/bin/env python
from bcc import BPF
while 1:
try:
BPF(text='int kprobe__sys_sync(void *ctx) { bpf_trace_printk("Tracing sys_sync()... Ctrl-C to end!\\n"); return 0; }').trace_print()
except ValueError:
continue
#end
这个python 脚本和第一个例程中的sys_clone .只是这个例程会重复执行。只有按下CTRL+C 才会停止。
在没有停止的时候会一直检测系统,只要有调用sys_sync的地方,就会打印。这样可以间接通过调用sys_sync的次数
Lesson 1. Hello World
最新推荐文章于 2023-05-22 18:20:48 发布