ebp:如何完成型別的訪問,如果型別變了會怎麼辦
阿新 • • 發佈:2022-02-19
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裡面吧?然後也會記錄著這個地方是用的哪個資料結構,在執行的時候,會去檢查實際訪問這個地址是否是合法的,