Linux · Kernel · Syscalls · C/C++ · Toolchain

EBFE
системное программирование

Пространство для тех, кто хочет понимать, что происходит под капотом: как процесс общается с ядром, почему память не бесконечна, как отлаживать сложные баги и как писать код, который уважает железо.

syscallsELFptraceepollperfeBPFOSDev

О чем EBFE

Системное программирование — это слой между «код работает» и «код работает надежно, быстро и понятно». EBFE собирает практику, разборы и материалы для низкоуровневой инженерии.

01

Понимать границы

Пользовательское пространство, ядро, ABI, системные вызовы, файлы, сокеты, сигналы и права.

02

Отлаживать глубоко

GDB, core dump, strace, ltrace, perf, sanitizers, Valgrind, eBPF и аккуратная гипотеза перед фиксом.

03

Писать ближе к машине

C/C++, ассемблерные вставки, layout памяти, кеши, компиляторы, линковка, ELF и цена абстракций.

Маршрут обучения

Можно использовать как основу для канала, курса или личного плана. Каждый блок завершается маленькой практикой.

Главная идея

Не зубрить команды, а строить модель: процесс → память → файл → сеть → ядро → инструменты наблюдения. Чем лучше модель, тем быстрее находится причина бага.


readtracemeasurefix

Неделя 1
Linux как среда выполненияПроцессы, PID, FD, stdin/stdout/stderr, права, окружение, namespaces на уровне идеи.
Неделя 2
Системные вызовыopen/read/write/close, errno, blocking I/O, strace, разница libc wrapper и syscall.
Неделя 3
ПамятьСтек, heap, mmap, page fault, virtual memory, leak/use-after-free, sanitizer-подход.
Неделя 4
Процессы и IPCfork/exec/wait, pipe, signal, shared memory, Unix sockets и базовая синхронизация.
Неделя 5
Сеть и event loopTCP/UDP, non-blocking sockets, select/poll/epoll, backpressure, таймауты.
Неделя 6
Сборка и бинарникиGCC/Clang, make, linker, static/shared libraries, ELF, symbol table, objdump/readelf.
Неделя 7
Отладка и профилированиеGDB, core dump, perf, flamegraph, Valgrind, race conditions, минимальный repro.
Неделя 8
Ядро и OSDevKernel docs, modules, eBPF, драйверы на уровне обзора, boot flow и простая toy-OS лаборатория.

Полезные ссылки

Подборка первоисточников и справочников, которые стоит держать под рукой при изучении системного программирования.

Linux APILinux man-pages

Справочник по системным вызовам, libc, файлам, процессам, сигналам и многим интерфейсам Linux.

KernelLinux Kernel Documentation

Официальная документация ядра: development process, internal APIs, locking, драйверы и подсистемы.

OSDevCreating an Operating System

Практический вход в разработку собственной ОС: boot, toolchain, kernel, память и файловые системы.

DebugDebugging with GDB

Официальное руководство по GNU Debugger: breakpoint, watchpoint, backtrace, core dump, TUI и remote debug.

CompilerGCC Online Documentation

Опции компилятора, оптимизации, warnings, extensions, inline assembly, linker-related детали.

ToolchainLLVM Documentation

Документация по LLVM/Clang, IR, оптимизациям, backend-архитектуре и инструментам компиляции.

Profilingperf wiki

Материалы по perf_events: CPU counters, tracepoints, profiling, latency, flamegraph-подход.

Tracingstrace

Трассировка системных вызовов и сигналов: лучший первый шаг, когда программа ведет себя странно.

MemoryValgrind Documentation

Набор инструментов для поиска проблем с памятью, гонок, профилирования кеша и анализа heap.

eBPFeBPF Docs

Техническая документация по eBPF, libbpf, helper-функциям, map-типам и наблюдаемости Linux.

BuildGNU Make Manual

Официальное руководство по make: targets, prerequisites, variables, pattern rules и reproducible builds.

Практика для канала

Идеи лабораторных работ, которые можно публиковать как посты, челленджи или разборы решений.

lab-01

Мини-shell

Реализовать REPL, запуск внешних программ через fork/exec, пайпы и обработку Ctrl+C через signal.

lab-02

ELF inspector

Прочитать ELF header, вывести секции, символы и entry point. Потом сравнить вывод с readelf.

lab-03

malloc tracer

Сделать LD_PRELOAD-библиотеку, которая логирует malloc/free и помогает увидеть утечки.

lab-04

epoll echo server

Написать non-blocking TCP echo server, добавить лимиты, таймауты и измерить нагрузку через wrk/perf.

lab-05

ptrace mini-strace

Поймать вход/выход системного вызова, вывести номер syscall и код возврата для дочернего процесса.

lab-06

Page fault demo

Показать mmap, mprotect, SIGSEGV handler и объяснить, почему виртуальная память не равна физической.

Мини-шпаргалка

Команды, которые часто помогают перейти от «не работает» к конкретной гипотезе.

# Файлы, процессы, сеть через syscalls
strace -ff -tt -s 256 -o trace.log ./app
strace -p <pid> -e trace=network
lsof -p <pid>
ls -l /proc/<pid>/fd
# GDB и core dump
ulimit -c unlimited
gdb ./app core
(gdb) bt full
(gdb) info registers
(gdb) disassemble /m
# Бинарники и линковка
file ./app
readelf -hW ./app
readelf -Ws ./app | less
objdump -d -Mintel ./app
ldd ./app
# Производительность
perf stat -- ./app
perf record -g -- ./app
perf report
sudo perf top
cat /proc/meminfo