Понимать границы
Пользовательское пространство, ядро, ABI, системные вызовы, файлы, сокеты, сигналы и права.
Пространство для тех, кто хочет понимать, что происходит под капотом: как процесс общается с ядром, почему память не бесконечна, как отлаживать сложные баги и как писать код, который уважает железо.
Системное программирование — это слой между «код работает» и «код работает надежно, быстро и понятно». EBFE собирает практику, разборы и материалы для низкоуровневой инженерии.
Пользовательское пространство, ядро, ABI, системные вызовы, файлы, сокеты, сигналы и права.
GDB, core dump, strace, ltrace, perf, sanitizers, Valgrind, eBPF и аккуратная гипотеза перед фиксом.
C/C++, ассемблерные вставки, layout памяти, кеши, компиляторы, линковка, ELF и цена абстракций.
Можно использовать как основу для канала, курса или личного плана. Каждый блок завершается маленькой практикой.
Не зубрить команды, а строить модель: процесс → память → файл → сеть → ядро → инструменты наблюдения. Чем лучше модель, тем быстрее находится причина бага.
read → trace → measure → fix
Подборка первоисточников и справочников, которые стоит держать под рукой при изучении системного программирования.
Справочник по системным вызовам, libc, файлам, процессам, сигналам и многим интерфейсам Linux.
Официальная документация ядра: development process, internal APIs, locking, драйверы и подсистемы.
Большой справочник и учебник по Linux/UNIX system programming от Michael Kerrisk.
Практический вход в разработку собственной ОС: boot, toolchain, kernel, память и файловые системы.
Официальное руководство по GNU Debugger: breakpoint, watchpoint, backtrace, core dump, TUI и remote debug.
Опции компилятора, оптимизации, warnings, extensions, inline assembly, linker-related детали.
Документация по LLVM/Clang, IR, оптимизациям, backend-архитектуре и инструментам компиляции.
Материалы по perf_events: CPU counters, tracepoints, profiling, latency, flamegraph-подход.
Трассировка системных вызовов и сигналов: лучший первый шаг, когда программа ведет себя странно.
Набор инструментов для поиска проблем с памятью, гонок, профилирования кеша и анализа heap.
Техническая документация по eBPF, libbpf, helper-функциям, map-типам и наблюдаемости Linux.
Официальное руководство по make: targets, prerequisites, variables, pattern rules и reproducible builds.
Идеи лабораторных работ, которые можно публиковать как посты, челленджи или разборы решений.
lab-01Реализовать REPL, запуск внешних программ через fork/exec, пайпы и обработку Ctrl+C через signal.
lab-02Прочитать ELF header, вывести секции, символы и entry point. Потом сравнить вывод с readelf.
lab-03Сделать LD_PRELOAD-библиотеку, которая логирует malloc/free и помогает увидеть утечки.
lab-04Написать non-blocking TCP echo server, добавить лимиты, таймауты и измерить нагрузку через wrk/perf.
lab-05Поймать вход/выход системного вызова, вывести номер syscall и код возврата для дочернего процесса.
lab-06Показать 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