0x1:基本概念
- 当使用tracepoint的时候,函数参数如何确认?
cat /sys/kernel/debug/tracing/events/syscalls/xxx/format. xxx为要跟踪的函数,在这里有函数参数定义。
0x2:注意事项
-
写结构体的时候一定要注意内存对齐,防止被编译器优化填充。
-
使用 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
- 指针被操作过后,就得再次声明,不然会被禁止访问
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