GCC enthält jetzt ein Backend für die Kompilierung in eBPF

In der GCC-Compiler-Suite enthalten angenommen von Code zum Kompilieren von Programmen für den im Linux-Kernel integrierten Bytecode-Interpreter eGMP. Dank der Verwendung der JIT-Kompilierung wird der Kernel-Bytecode im laufenden Betrieb in Maschinenanweisungen übersetzt und mit der Leistung von nativem Code ausgeführt. Patches mit eBPF-Unterstützung akzeptiert zu dem Zweig, aus dem die GCC 10-Version entwickelt wird.

Neben einem Backend für die Bytecode-Generierung enthält GCC einen libgcc-Port für eBPF und Tools zum Generieren von ELF-Dateien, die es ermöglichen, Code in der virtuellen eBPF-Maschine mithilfe vom Kernel bereitgestellter Loader auszuführen. Patches zur Unterstützung von eBPF in GCC wurden von Ingenieuren von Oracle vorbereitet, die dies bereits getan hatten unter der Voraussetzung eBPF-Unterstützung in GNU-Binutils. Ein Simulator und Patches für GDB sind ebenfalls in der Entwicklung, die es Ihnen ermöglichen, eBPF-Programme zu debuggen, ohne sie in den Kernel laden zu müssen.

Programme für eBPF können in einer Teilmenge der C-Sprache definiert, kompiliert und in den Kernel geladen werden. Vor der Ausführung überprüft der eBPF-Interpreter den Bytecode auf die Verwendung erlaubter Anweisungen und erlegt dem Code bestimmte Regeln auf (z. B. keine Schleifen).
Ursprünglich wurden LLVM-basierte Tools zum Kompilieren von eBPF unter Linux verwendet. Die eBPF-Unterstützung in GCC ist interessant, weil sie es Ihnen ermöglicht, ein Toolkit zum Erstellen des Linux-Kernels und der eBPF-Programme zu verwenden, ohne zusätzliche Abhängigkeiten zu installieren.

In Form von eBPF-Programmen können Sie Netzwerkbetriebshandler erstellen, Datenverkehr filtern, Bandbreite verwalten, Systeme überwachen, Systemaufrufe abfangen, den Zugriff steuern, die Häufigkeit und Zeit von Vorgängen zählen und mithilfe von kprobes/uprobes/tracepoints eine Ablaufverfolgung durchführen.

Source: opennet.ru

Kommentar hinzufügen