bstrace (BPF syscall trace) - утилита для логирования системных вызовов
Основной замысел - отслеживание системных вызовов пользовательских процессов на стороне ядра, используя технологию ebpf
Основная ebpf C-программа типа BPF_PROG_TYPE_RAW_TRACEPOINT подключается к точке трассировки ядра, отслеживающим системные вызовы из пользовательских процессов, собирает данные о деталях вызовов на стороне ядра, и передает их в пространство пользователя для форматированного вывода.
Основная программа через вспомогательную функцию использует механизм хвостовых вызовов ebpf для реализации логики парсеров конкретных системных вызовов
Приложение в пользовательском пространстве реализовано на go с использованием cilium/ebpf. Приложение конфигурирует и загружает ebpf программы ядра и читает данных из пространства пользователя через ringbuffer
Верификатор ebpf позволяет избежать основных сложностей при написании программ на C, таких как разыменование нулевых указателей, сложность работы с памятью и т.п. При этом доступны все структуры данных ядра. Библиотека libbpf предоставляет макросы и вспомогательные функции для удобства написания переносимых между архитектурами и версиями ядер программ.