Zawarte w pakiecie kompilatorów GCC
Oprócz backendu do generowania kodu bajtowego, GCC zawiera port libgcc dla eBPF i narzędzia do generowania plików ELF, które umożliwiają wykonanie kodu na maszynie wirtualnej eBPF przy użyciu programów ładujących dostarczonych przez jądro. Poprawki obsługujące eBPF w GCC zostały przygotowane przez inżynierów z Oracle, którzy już to zrobili
Programy dla eBPF można zdefiniować w podzbiorze języka C, skompilować i załadować do jądra. Przed wykonaniem interpreter eBPF sprawdza kod bajtowy pod kątem użycia dozwolonych instrukcji i nakłada na kod pewne zasady (na przykład brak pętli).
Początkowo do kompilacji eBPF w systemie Linux używano narzędzi opartych na LLVM. Obsługa eBPF w GCC jest interesująca, ponieważ pozwala na użycie jednego zestawu narzędzi do zbudowania jądra Linuksa i programów eBPF, bez instalowania dodatkowych zależności.
W postaci programów eBPF można tworzyć procedury obsługi operacji sieciowych, filtrować ruch, zarządzać przepustowością, monitorować systemy, przechwytywać wywołania systemowe, kontrolować dostęp, zliczać częstotliwość i czas operacji oraz wykonywać śledzenie za pomocą kprobes/uprobes/tracepoints.
Źródło: opennet.ru