Есть ли смысл сейчас идти в ELF?

iK4nt

One Level
22.06.2026
2
0
Специализация
  1. Форензика
  2. DevSecOps
Ку, есть ли смысл сейчас погружаться с головой в ELF/ABI/Linker?
Моя текущая программа обучения, разделённая и упорядоченная по следующим книгам. Прошу поделиться своими замечаниями на тему актуальности и "правильности" выбранного пути обучения и возможными улучшениями. Заранее отмечаю, что MAN и практика подразумеваются на любом этапе обучения и, ваши рекомендации и предпочтения по практике/теории были бы кстати.
  1. Learn to program with assembly (2021, Jonathan Barlett). (хорошо показывает linux ABI и x86-64 ISA)
  2. The C Programming Language (2022, ANSI C, K&R)
  3. TLPI (2010, Michael Kerrisk). Для libc
  4. Learning Linux Binary Analysis (2016, Ryan "elfmaster" O'Neill)
  5. Python для ld библиотек
  6. Добивка устаревших и/или отсутствующих в TLPI материалов (NETLINK кофигурация виртуальных устройств/мостов, namespaces, clone3, cgroupsv2 и др)
  7. Linux Device Drivers (Корбет, дрова)
  8. Чтение сорса
Целью ставится качественное обучение "базе" перед переходом к тулзам (и их реимплементация). Интересуют ваши взгляды.
спс
 
Последнее редактирование:

Привет, а какова твоя конечная цель? Ты хочешь работать с ядром/дравами, писать инструменты, или это просто интерес к fundamentals?​

Особо подсказать не могу, но вот что написал искусственный интеллект​

----​

Теория​

  • Не читай подряд. Используй книги как справочники.
  • После каждой главы TLPI (или части K&R) — сразу код.
  • MAN pages — это не доп материал, это основной источник.

Практика​

  1. Уровень 0 (assembly → C):
    • Напиши mycat, mychmod на C после K&R главы 5-6
    • Изучи их с objdump -d, readelf
    • Посмотри, как меняется assembly в зависимости от флагов оптимизации
  2. Уровень 1 (file I/O, process):
    • myls (readdir, stat)
    • myshell (fork, exec, wait)
    • Trace с strace, смотри syscalls
  3. Уровень 2 (signals, sockets):
    • simple_server (TCP)
    • Signal handlers
    • Используй ltrace, strace параллельно
  4. Уровень 3 (ELF/linker):
    • Напиши свой простой linker (ассемблируй объектные файлы)
    • Или простой loader (загрузи ELF вручную, установи точку входа)
    • Это даст понимание лучше, чем любая книга

Что я бы изменил в твоем плане​

✅ Хорошо​

  • Assembly перед C
  • TLPI за C
  • Идея с Python для ld библиотек (это творчески)

⚠️Нужны правки​

  1. Не читай "Learning Linux Binary Analysis" целиком подряд. Переключись на неё, когда встретишь в TLPI/практике конкретный вопрос про ELF.
  2. Добавь между K&R и TLPI
    • Написание 3-5 небольших утилит (mycat, myls, mychmod)
    • Изучение их с objdump/readelf/nm
    • Это "мост" между теорией и практикой
  3. Device Drivers (Linux Device Drivers) — позже. Сначала завершай системное программирование (сигналы, потоки, IPC). Драйверы — это нишевая тема, требует уже хорошей базы.
  4. Порядок добивки:
    • namespaces и cgroups — параллельно с Drivers (контейнеры) или даже потом
    • NETLINK — если конкретно про виртуальные устройства, это может быть в контексте networking, а не обязательно сейчас
    • clone3 — изучи clone/fork сначала в TLPI, потом clone3 как modern вариант

Предложенная​

1. Learn to program with assembly (Барретт)
↓ (напиши 2 программы на asm, изучи их ABI)
2. K&R главы 1-6 + написание утилит (mycat, mychmod)
↓ (параллельно начинаешь TLPI)
3. TLPI главы 2-10 (файлы, процессы, сигналы, IPC)
+ TLPI chapters про dynamic linking (когда они появляются)
+ "Learning Linux Binary Analysis" как reference для ELF вопросов
↓ (напиши: myshell, simple_server, signal demo)
4. TLPI главы 11-30+ (потоки, памятью, file locking и т.д.)
↓ (напиши: multithreaded server, memory mapper)
5. Linux Device Drivers (уже на уровне kernel interfaces)
+ namespaces/cgroups/clone3 (в контексте контейнеров/процессов)
6. Linker/loader deep dive (если интересует tooling)
- Написание своего loader/linker
- Python для dynamic libraries
7. Чтение сорса (kernel, glibc, musl)





Финальный совет​

Твоя цель "качественная база перед тулзами" звучит правильно. Но не застревай в теории. Каждые 2-3 дня прочтения должны сопровождаться кодом. И не все тулзы нужно реимплементировать — некоторые стоит просто глубоко изучить через MAN + исходный код.

Удачи. Это серьёзный путь, но результат того стоит.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →

Популярный контент

🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab