theeighthofseptember,
Считывается информация о сегментах.
Выделяется память под сегменты.
Загружаются код и данные в сегменты.
Устанавливаются заголовки программы — например, с какими параметрами командной строки и с какой настройкой окна она была запущена.
Где-то между делом рекурсивно загружает динамические модули, которые статически прикреплены к программе: прогины сегменты уже есть, заголовки тоже, и код, судя по принципу действия бэкдора XZ, уже загружен, а вот адреса уточнены не полностью.
Уточняются адреса: динамическая линковка, relocations, indirect functions…
Всем страницам, входящим в сегменты, присваиваются окончательные свойства.
Устанавливаются регистры. (Чтобы indirect functions работали, это надо сделать раньше.)
Передача управления точке входа.
Freeman,
Адресация от IP — это что-то вроде mov rax, [rip+12345]. Есть такое в x64 специально чтобы код был более компактным (чтобы не нужны были 9 байт на команду) и содержал меньше relocation’ов.
Вова, Да, лексика, синтаксис и семантика работают условно-параллельно, но это разные слои разбора текста. Когда видим «class ID», мы объявляем: у нас недоопределённый класс ID, и мы без вопросов можем принимать типы вроде ID*.
Параллельная работа может идти вразрез с другими задачами: скажем, в моём примере поле x определено после конструктора. Это требует дополнительных телодвижений от компилятора — отложить семантический анализ или его часть. Зато упрощает жизнь программисту.
Вова, На самом деле init → id initializer; initializer → { braced-initializer } | ( param-list ) — в общем, сложно. Я не уверен, что так оно в официальной бэкусовской форме. Да, у языка есть официальная бэкусовская форма, и потому разные реализации крайне редко лажают с синтаксисом, зато с семантикой вечно что-то не так.
Вова, За это синтаксический анализатор не отвечает. Он говорит, что инициализируем поле x выражением std::move(x) — а за то, существует ли поле x, по порядку ли и вправе ли мы его инициализировать, отвечает семантика.
Alexchexes, Аппаратно это устроено так: видяха даёт видеосигнал, а матрица его выводит, буферизируя по минимуму. Так что или матрица покажет, или не покажет, а так, чтобы показала, но были глюки — маловероятно.
Deatan, Я копался и потому знаю — но метод сжатия, разумеется, рассматриваю как чёрный ящик. Тут не столько спецификация ZIP, сколько возможности библиотеки сжатия.