操作系统:可选用ubuntu或者centos
内核版本:4.18+
cat /boot/config -`uname -r` | grep BTF
如果回显中显示CONFIG_INFO_BTF=y
表示开启。如果未开启需要重新编译内核开启。
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
生成这个头文件是linux内核头文件的大集合,结合以下头文件作为ebpf c代码的头部引用:
#include "vmlinux.h"
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_endian.h>
#include <bpf/bpf_core_read.h>
#include <bpf/bpf_tracing.h>
yum -y install libbpf-devel
部分操作系统版本的软件源可能没有,需要自行找RPM包安装。
xz -d llvm-project-11.0.0.tar.xz
tar -xvf llvm-project-11.0.0.tar
cd llvm-project-11.0.0
mkdir build
cd build
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" -G "Unix Makefiles" ../llvm
make
# 需要等待约4小时
make install
# 需要等待约半小时
llvm-config --has-rtti
YES
需要宿主机内核版本满足要求。
选用cilium/ebpf项目(tag:v0.8.0)中的样例:uretprobe。(这里需要加上golang的构建能力)
BPF_CLANG=clang BPF_CFLAGS="-O2 -Wall" go generate main.go
go build .
./uretprobe
2023/01/31 19:30:15 Listening for events..
开启一个新窗口输入hello:
hello
bash: hello: command not found
在开启监听的窗口可以收到:
./uretprobe
2023/01/31 19:30:15 Listening for events..
2023/01/31 19:30:34 /bin/bash:readline return value: hello
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。