簡體   English   中英

如何讓用戶空間在加載時填充 ebpf 全局數據?

[英]How to let user space to populate an ebpf global data at load time?

我想將用戶指定的變量值從用戶空間程序的命令行傳遞給 ebpf 程序。 我知道如何使用 bpf 地圖來做到這一點,但我聽說有一種更有效的方法可以使用 bpf 全局數據來做到這一點。

任何人都可以提供一些代碼示例嗎? (我正在使用 libbpf)

理論上你可以用static global data做這樣的事情。 在將程序加載到 kernel 之前,Libbpf 會將來自 ELF 部分(如 .rodata、.bss 和 .data)的數據作為文字重定位到 eBPF 字節碼中。 理論上,您可以修改包含程序的 ELF 文件或以某種方式掛鈎到重定位代碼以注入在運行時傳遞的自定義值。 我不知道 libbpf 是否支持這個。

在大多數情況下,性能應該不是那么大的問題,如果是,您可能需要考慮使用BCC來動態編譯程序(這也可能會進行額外的優化,例如根據靜態/常量值刪除代碼分支) .

另一種更具挑戰性的方法是從編譯的程序中提取 eBPF 指令,然后使用 libbpf 重新創建相同的指令,並僅更改您想要更改的字節碼中的值。 下面是從 C 生成 eBPF 指令的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM