I Анализ бинарного кода
Манипуляции с объектным (бинарным) кодом с точки зрения разработчика программ. Утилиты пакета GNU binutils: ar, strings, strip, nm, size, readelf, objdump. Позиционно независимый код. Динамические и разделяемые библиотеки, особенности организации и загрузки.
Статический и динамический анализ бинарного кода. Классический подход: дизассемблирование, восстановление меток, интерактивный дизассемблер IDA Pro. Представление результатов анализа: граф вызов функций, граф потока управления, граф потока данных.
Вспомогательные данные, используемые в анализе бинарного кода. Символы системных функций и данных. Распознавание в машинном коде конструкций языка Си.
II Архитектура Intel64
Краткий обзор архитектуры Intel64, ее отличия от IA32. Соглашение о связях, используемое в 64-разрядном коде.
Регистры общего назначения. Примеры команд. Регистры XMM. Примеры скалярных команд. Примеры векторных команд.
Режимы работы процессора: 64-разрядный режим, режим совместимости, 32-разрядный режим. Различия между ними. Стек в 64-разрядном режиме.
Соглашение о связях System V AMD64. Соглашение о связях Microsoft.
Шины передачи данных, используемые в современных настольных компьютерах, серверах, встраиваемых системах.
III Анализ кода ОС на примере MS Windows
Использование аппаратуры процессоров семейства x86 для организации многозадачного режима в ОС Windows. Адресные пространства, процессы и потоки. Пространство имен диспетчера объектов. Взаимосвязь основных объектов ядра. Прохождение запроса в/в между user и kernel mode. Основы построения драйверов ядра.
Средства анализа кода в ОС Windows. Примеры проведения динамического анализа с использованием трассировщика.
IV Архитектура ARM
Обзор архитектуры ARM. Соглашение о связях. Регистры общего назначения. Примеры команд. Кодирование команд в виде ARM и Thumb. Векторная архитектура NEON: векторные регистры, примеры команд.
Оптимизации компилятора, полезные для архитектуры ARM. Рассмотрение практических задач: оптимизация программ на языке Си для платформы ARM, автонастройка компилятора для данной программы, оптимизация энергосбережения.
V Виртуальные машины
Программная эмуляция компьютерной системы. Бинарная трансляция машинного кода. Виртуальная машина Qemu.