GCC inkluderar nu en backend för kompilering till eBPF

Ingår i GCC-kompilatorsviten antagen kod för att kompilera program för bytecode-tolken inbyggd i Linux-kärnan eGMP. Tack vare användningen av JIT-kompilering översätts kärnbytekoden i farten till maskininstruktioner och exekveras med prestanda av inbyggd kod. Patchar med eBPF-stöd accepterad till grenen från vilken GCC 10-versionen är utvecklad.

Förutom en backend för bytecode-generering, inkluderar GCC en libgcc-port för eBPF och verktyg för att generera ELF-filer som gör det möjligt att exekvera kod i den virtuella eBPF-maskinen med hjälp av kärnanförsedda laddare. Patchar för att stödja eBPF i GCC utarbetades av ingenjörer från Oracle, som redan hade gjort det försedd eBPF-stöd i GNU-binutils. En simulator och patchar för GDB är också under utveckling, vilket gör att du kan felsöka eBPF-program utan att ladda dem i kärnan.

Program för eBPF kan definieras i en delmängd av C-språket, kompileras och laddas in i kärnan. Före exekvering kontrollerar eBPF-tolken bytekoden för användning av tillåtna instruktioner och inför vissa regler för koden (till exempel inga loopar).
Till en början användes LLVM-baserade verktyg för att kompilera eBPF på Linux. eBPF-stöd i GCC är intressant eftersom det låter dig använda en verktygslåda för att bygga Linux-kärnan och eBPF-program, utan att installera ytterligare beroenden.

I form av eBPF-program kan du skapa nätverkshanterare, filtrera trafik, hantera bandbredd, övervaka system, avlyssna systemanrop, kontrollera åtkomst, räkna frekvens och tid för operationer och utföra spårning med hjälp av kprobes/uprobes/spårpunkter.

Källa: opennet.ru

Lägg en kommentar