bpf程序是如何控制内存类型的访问
bpf_probe_read
试着把类型转化的部分,换成一个内核不识别的函数,看下下编译和执行是否都能正确地进行~
把内核中samples/bpf中的tracex1_kern.c中的
skb = (struct sk_buff*) PT_REGS_PARM1(ctx);
中的sk_buff替换成一种别的结构体 net_device,然后在编译的时候,会出现这种错误:结构体的结构体的解析是按照;【问题:运行时的检查是什么样子的】
samples/bpf/tracex1_kern.c:32:6: warning: incompatible pointer types assigning to 'struct sk_buff *' from 'struct net_device *' [-Wincompatible-pointer-types] skb = (struct net_device*) PT_REGS_PARM1(ctx); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated.
运行时的检查会是什么样子的,bpf会记录这个内核结构体是什么东西,然后在真正执行的时候,会去检查内核结构体中的size是不是,内核中是记录着结构体的信息,是在dwarf里面吧?然后也会记录着这个地方是用的哪个数据结构,在运行的时候,会去检查实际访问这个地址是否是合法的,