GCC 現在包含用於編譯到 eBPF 的後端

包含在 GCC 編譯器套件中 採納 用於為 Linux 核心內建的字節碼解釋器編譯程式的程式碼 eGMP。 由於使用了 JIT 編譯,核心字節碼可以即時翻譯為機器指令,並以本機程式碼的效能執行。 支援 eBPF 的補丁 公認 到開發 GCC 10 版本的分支。

除了用於生成字節碼的後端之外,GCC 還包括用於 eBPF 的 libgcc 連接埠和用於生成 ELF 檔案的工具,這些工具使得可以使用核心提供的載入器在 eBPF 虛擬機器中執行程式碼。 在 GCC 中支援 eBPF 的補丁是由 Oracle 的工程師準備的,他們已經 假如 GNU binutils 中的 eBPF 支援。 GDB 的模擬器和補丁也在開發中,這將允許您調試 eBPF 程式而無需將它們載入到核心中。

eBPF 程式可以用 C 語言的子集定義、編譯並載入到核心中。 在執行之前,eBPF 解釋器會檢查字節碼是否使用了允許的指令,並對程式碼施加某些規則(例如,無循環)。
最初,基於 LLVM 的工具用於在 Linux 上編譯 eBPF。 GCC 中的 eBPF 支援很有趣,因為它允許您使用一個工具包來建立 Linux 核心和 eBPF 程序,而無需安裝額外的依賴項。

以 eBPF 程式的形式,您可以建立網路操作處理程序、過濾流量、管理頻寬、監控系統、攔截系統呼叫、控制存取、統計操作的頻率和時間,以及使用 kprobes/uprobes/tracepoints 執行追蹤。

來源: opennet.ru

添加評論