ebpf-go c结构体和go结构体的映射

原创 吴就业 154 0 2024-05-31

本文为博主原创文章,未经博主允许不得转载。

本文链接:https://wujiuye.com/article/c21358d4cd23496792c763c8ace53b83

作者:吴就业
链接:https://wujiuye.com/article/c21358d4cd23496792c763c8ace53b83
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。

假如我们在c语言中声明了两个结构体key、value。

struct key{
    char dir[256];
};

struct value{
   u64 disable;
};

如果我们想在go中使用,直接在go中写结构体可能类型上处理不对。如果能自动生成go结构体就好了。

在c代码中添加以下两行:

const struct key *unused_key __attribute__((unused));
const struct value *unused_value __attribute__((unused));

在gen.go中修改go:generate命令:

package main

//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type key -type value -target amd64 vfstrace vfs-trace.c

生成结果如下:

type vfstraceKey struct{ 
	Dir [256]int8 
}

type vfstraceValue struct{ 
	Disable uint64 
}
#eBPF

声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。

文章推荐

利用eBPF LSM实现Blocking写文件操作

LSM hook允许我们返回非0以Blocking掉系统调用,file_permission这个hook可以用来Blocking vfs_write。

看图理解linux内核网络流量控制工具tc(Traffic Control)

tc是Linux内核中用于流量控制的一套功能强大的工具和框架、是内核的一个子系统。本篇通过画图理解tc涉及的概念,并通过实验理解这些概念,以及了解tc命令怎么用。

一个稍微复杂的ebpf-go学习案例:给vfs_write写操作挂个hook

借助eBPF,给vfs_write写操作挂个hook,可以用这个hook实现一些可观察需求。本案例仅供参考学习,可以把案例中的vfs_write改成其它的。

踩坑记,如何使用ebpf-go,实战案例:拦截vfs_read函数获取文件名输出

新手入门调研学习使用ebpf-go的笔记, 记录了笔者在实现demo案例过程中踩的坑,很详细。

如何使用bpftrace追踪系统调用性能问题

所以,这个案例的用途是:在read函数调用之前,记录时间戳,在read函数return前计算方法执行耗时,将结果保存到`us`全局变量。使用`@`声明的全局变量,会在bpftrace脚本进程结束时输出到控制台。