В данной книге речь идёт о работе процессора в двух его основных режимах: защищённом режиме и 64-битном, который также называют long mode («длинный режим»). Также помимо изложения принципов и механизмов работы процессора в защищённом и 64-битном режимах, речь пойдёт о программировании на ассемблере в операционных системах семейства Windows, как в 32-битных, так и 64-битных версиях. Рассматривается не только разработка обычных приложений для операционных систем Windows, но и разработка драйверов на ассемблере. При написании книги уделялось большое внимание именно практической составляющей, т.е. изложение материала идёт только по делу и только то, что необходимо знать любому системному и низкоуровневому программисту. Последний раздел книги посвящён принципам работы многопроцессорных систем, а также работе с расширенным программируемым контроллером прерываний (APIC).
На диске, прилагаемом к книге, находятся полные исходные коды примеров к книге, а также дополнительные программы и материалы.
Издание предназначено для системных и низкоуровневых программистов, а также для студентов и преподавателей технических специальностей высших и средне-специальных учебных заведений.
Author(s): Аблязов Р.З.
Publisher: ДМК Пресс
Year: 2011
Language: Russian
Pages: 304
City: Москва
Tags: Информатика и вычислительная техника;Информатика (программирование);Программирование на ASSEMBLER;
Используемый компилятор
......Page 9
1.1.1. Что такое процессор?
......Page 10
1.1.2. Небольшая предыстория
......Page 13
1.1.3. Процессоры х86-64
......Page 15
1.1.4. Регистры процессоров х86-64
......Page 17
1.1.5. Память
......Page 18
1.1.7. Резюме
......Page 20
1.2.1. Немного о языке ассемблера
......Page 21
1.2.2. Регистр флагов
......Page 22
1.2.3. Команда MOV
......Page 23
1.2.4. Формат хранения данных в памяти
......Page 25
1.2.6. Логические операции
......Page 26
1.2.7. Сдвиги
......Page 27
1.2.10. Резюме
......Page 29
1.3.1. Данные
......Page 30
1.3.2. Метки
......Page 31
1.3.3. Переходы
......Page 34
1.3.4. Безымянные метки
......Page 37
1.4. Изучаем ассемблер подробнее
......Page 38
1.4.1. Работа с памятью и стеком
......Page 39
1.4.2. Работа с числами на ассемблере
......Page 40
1.4.3. Умножение и деление
......Page 43
1.4.5. Циклы
......Page 45
1.4.6. Обработка блоков данных
......Page 46
1.4.8. Структуры
......Page 51
1.4.9. Работа с MSR-регистрами
......Page 52
1.4.10. Команда CPUID
......Page 53
1.4.13. Резюме
......Page 54
2.1.1. Уровни привилегий
......Page 55
2.1.2. Сегменты в защищённом режиме
......Page 57
2.1.3. Глобальная дескрипторная таблица
......Page 60
2.1.4. Практика
......Page 62
2.1.5. Резюме
......Page 69
2.2.1. Что такое прерывание?
......Page 70
2.2.2. Дескрипторы шлюзов
......Page 71
2.2.3. Исключения
......Page 73
2.2.4. Коды ошибок
......Page 75
2.2.6. Аппаратные прерывания
......Page 76
2.2.7. Обработчик прерывания
......Page 78
2.2.8. Практика
......Page 79
2.3.1. Что это такое?
......Page 84
2.3.2. Обычный режим трансляции адресов
......Page 86
2.3.3. Режим расширенной физической трансляции адресов
......Page 90
2.3.4. Обработчик страничного нарушения
......Page 93
2.3.5. ФлагУ7Р в регистре CR0
......Page 94
2.3.6. Практика
......Page 95
2.4.1. Общие сведения
......Page 101
2.4.2. Сегмент задачи (TSS)
......Page 102
2.4.4. Локальная дескрипторная таблица
......Page 104
2.4.6. Управление задачами
......Page 105
2.4.8. Уровень привилегий ввода-вывода
......Page 108
2.4.10. Включение многозадачности
......Page 109
2.4.11. Практическая реализация
......Page 110
2.4.12. Резюме
......Page 117
2.5.1. Поля и флаги, используемые для защиты на уровне сегментов и страниц
......Page 118
2.5.3. Проверки типов
......Page 119
Механизмы защиты
......Page 120
2.5.4. Уровни привилегий
......Page 121
2.5.5. Проверка уровня привилегий при доступе к сегментам данных
......Page 122
2.5.6. Проверка уровней привилегий при межсегментной передаче управления
......Page 123
2.5.7. Шлюзы вызова
......Page 124
2.5.8. Переключение стека
......Page 127
2.5.9. Использование инструкций SYSENTER и SYSEXIT
......Page 128
2.5.11. Резюме
......Page 132
3.1. Введение в Win32
......Page 133
3.1.2. Память в Win32
......Page 134
3.1.3. Исполняемые компоненты Windows
......Page 135
3.1.4. Системные библиотеки и подсистемы
......Page 136
3.1.6. Выполнение программ в Win32: общая картина
......Page 137
3.1.7. Практика
......Page 138
3.1.8. Резюме
......Page 146
3.2.1. Общий обзор
......Page 147
3.2.3. Работа с файлами
......Page 148
3.2.5. Консольные программы
......Page 151
3.2.6. GUI-программы
......Page 152
3.2.7. Динамически подключаемые библиотеки
......Page 155
3.2.8. Обработка исключений в программе
......Page 158
3.2.9. Практика
......Page 161
3.3. Программирование в нулевом кольце
......Page 170
3.3.1. Службы
......Page 171
3.3.2. Общий обзор
......Page 172
3.3.3. Driver Development Kit (DDK)
......Page 173
3.3.4. Контекст потока и уровни запросов прерываний
......Page 174
3.3.5. Пример простого драйвера
......Page 175
3.3.6. Строки в ядре Windows
......Page 178
3.3.7. Подсистема ввода-вывода
......Page 179
3.3.8. Практика
......Page 185
3.3.9. Резюме
......Page 200
4.1.1. Общий обзор
......Page 201
4.1.2. Сегментация в long mode
......Page 203
4.1.4. Переход в long mode
......Page 204
4.1.5. Практика
......Page 205
4.2. Работа с памятью в long mode
......Page 207
4.2.2. Страницы размером 4 Кб
......Page 208
4.2.3. Страницы размером 2 Мб
......Page 210
4.2.4. Страницы размером 1 Гб
......Page 211
4.2.5. Регистр CR3
......Page 212
4.2.7. Практика
......Page 213
4.3.1. Дескрипторы шлюзов
......Page 220
4.3.2. Таблица ЮТ, 64-битный TSS и механизм 1ST
......Page 221
4.3.3. Вызов обработчика прерывания
......Page 222
4.3.4. Практика
......Page 223
4.4. Защита и многозадачность
......Page 229
4.4.2. Шлюзы вызова
......Page 230
4.4.3. Инструкции SYSCALL и SYSRET
......Page 231
4.4.4. Многозадачность
......Page 232
4.4.5. Практика
......Page 234
4.4.6. Резюме
......Page 237
5.1.1. Преимущества и недостатки
......Page 238
5.1.3. Модель вызова
......Page 239
5.1.5. Win64 API и системные библиотеки
......Page 241
5.2. Программирование в Win64
......Page 243
5.2.2. Выравнивание стека
......Page 244
5.2.3. GUI-приложения
......Page 245
5.2.4. Программирование драйверов
......Page 249
5.2.6. Резюме
......Page 253
6.1.1. Общий обзор
......Page 254
ЗЕр
......Page 255
6.1.4. Локальная векторная таблица
......Page 256
6.1.5. Local APIC Timer
......Page 258
6.1.6. Обработка прерываний
......Page 260
6.1.7. Работа с I/O APIC
......Page 262
6.1.8. Практика
......Page 265
6.2.1. Общий обзор
......Page 269
6.2.2. Межпроцессорные прерывания
......Page 270
6.2.3. Синхронизация доступа к данным
......Page 272
6.2.4. Инициализация многопроцессорной системы
......Page 274
6.2.5. Практика
......Page 275
6.2.6. Резюме
......Page 279
А.2. Регистры, используемые командами SYSENTER/SYSEXIT
......Page 280
А.4. Регистры APIC
......Page 281
Б.1. Регистр CR0
......Page 282
Б.2. Регистры CR2 nCR3
......Page 284
Б.З. Регистр CR4
......Page 285
Б.4. Регистры GDTR и IDTR
......Page 286
Б.6. Регистр флагов
......Page 287
В.1. Работа с системными регистрами
......Page 289
В.2. Системные команды
......Page 292
В.4. Дополнительные команды
......Page 294
о
......Page 296
ш
......Page 297
н
......Page 298
X
......Page 299