eBPF编写避坑指南

本文介绍了eBPF的基本概念,包括如何确认tracepoint的函数参数;强调了注意事项,如内存对齐和避免编译器填充,使用LLVM内置函数进行内存操作,以及指针操作后的声明;列举了常见的报错及其解决方法,如处理负值、内存访问、栈空间限制、未初始化的寄存器等问题。
摘要由CSDN通过智能技术生成

0x1:基本概念

  1. 当使用tracepoint的时候,函数参数如何确认?

cat /sys/kernel/debug/tracing/events/syscalls/xxx/format. xxx为要跟踪的函数,在这里有函数参数定义。

0x2:注意事项

  1. 写结构体的时候一定要注意内存对齐,防止被编译器优化填充。

  2. 使用 LLVM 内置的函数做内存操作

#ifndef memset
# define memset(dest, chr, n)   __builtin_memset((dest), (chr), (n))
#endif

#ifndef memcpy
# define memcpy(dest, src, n)   __builtin_memcpy((dest), (src), (n))
#endif

#ifndef memmove
# define memmove(dest, src, n)  __builtin_memmove((dest), (src), (n))
#endif
  1. 指针被操作过后,就得再次声明,不然会被禁止访问
struct iphdr *ip4 = (struct iphdr *) skb->data + ETH_HLEN; //第一次赋值

skb_store_bytes(skb, l3_off + offsetof(struct iphdr, saddr), &new_saddr, 4, 0); //skb被操作了 因此ip4的值不可信,此时如果操作ip4会被拒绝

ip4 = (struct iphdr *) skb->data + ETH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值