Как понять vtables на самом деле
Можно спросить у ИИ, как устроены vtables в x86. Он выдаст ответ, который звучит правдоподобно. Но он не покажет, как vtables выглядят на самом деле в Windows, почему method dispatch ведёт себя именно так на уровне инструкций и что сломается, если отклониться от конвенции.
The Art of 64-Bit Assembly, Volume 2 — это книга не для тех, кто только начинает знакомиться с ассемблером. Она для тех, кто уже пишет код и хочет перестать принимать high-level концепции на веру.
УРОВЕНЬ ПОНИМАНИЯ
─────────────────
Верх ──► "ИИ объясняет vtables"
──► Книга по ассемблеру для начинающих
──► Randall Hyde, Volume 2
Низ ──► Реальный код под отладчиком
Кто это читает
Автор Рэндалл Хайд пишет ассемблер для медицинских устройств и ядерных систем. Там нет места формуле «работает вроде». Там либо правильно, либо всё ломается.
Он преподавал ассемблер в университете и написал The Art of Assembly Language, The Art of ARM Assembly и серию Write Great Code. Это человек, который явно не из мира «напишу книгу и свалю».
Книга выходит в июне 2026 года, в ней 792 страницы, ISBN — 9781718504349.
Что внутри
Каждая глава берёт high-level концепцию и разбирает её до уровня инструкций:
- Глава 6: Объектно-ориентированное программирование в MASM — vtables, method dispatch, наследование. С нуля, вручную, без рантайма.
- Глава 7: Обработка исключений — Windows SEH на инструкциях. Не вызов библиотечной функции, а то, как это устроено внутри.
- Главы 8–11: Thunks, closures, iterators, coroutines — всё, что вы используете в Python или Rust, но без абстракций. Thunks — это функции-обёртки, closures — функции, которые «запоминают» переменные из внешней области видимости, generators — функции, возвращающие значения по одному, fibers — облегчённые потоки, coroutines — функции с несколькими точками входа и выхода.
- Глава 5: Параллельное программирование — реальные synchronization primitives, а не абстракции ООП.
- Глава 2: Unicode-строки — автор показывает, где именно большинство делает это неправильно.
ОТ ИНСТРУКЦИИ — К КОНЦЕПЦИИ
────────────────────────────
Внутри ┌─────────────────────────────────┐
MASM ──────► │ vtables, closures, coroutines │
(глава 6-11) └─────────────────────────────────┘
Снаружи
C++ / Python / Rust
Чем полезна
Это не книга «просто интересно». Она полезна в конкретных случаях:
- Вы пишете компилятор или интерпретатор. Понимание того, как реально работает dispatch, экономит недели.
- Вы работаете с FFI. Стыковка ассемблера и высокоуровневого кода требует знания calling conventions и layout.
- Вы отлаживаете segfault’ы в продакшене. Когда отладчик показывает регистры, а не строки кода, важно понимать, что происходит.
- Вы хотите писать более быстрый код на высокоуровневых языках. Понимание того, что происходит под капотом, делает вас сильнее на любом стеке.
Когда не стоит брать
Честно: книга не для всех.
- Если вы ещё не знаете ассемблер, начните с The Art of Assembly Language или хотя бы с Programming from the Ground Up.
- Если вы хотите «быстро научиться программировать на ассемблере», эта книга не для скорости, а для глубины.
- Если вы работаете только в Linux, книга может оказаться слишком Windows-ориентированной. Тогда лучше искать материалы под Linux.
Вывод
Если вы уже пишете на x86-64 и high-level конструкции в ваших языках остаются чёрным ящиком, эта книга поможет вскрыть крышку.
Не потому что ассемблер «крут» или «нужен». А потому что понимание того, как вещи работают на самом деле, отличает инженера от копипастера.
Ссылки
- The Art of 64-bit Assembly — страница книги у издателя
Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.