год-2011
366 страниц
Детально и доходчиво в книжке Ассемблер - просто. Учимся программировать. 2-е изд. Калашников объясняются все основные вопросы программирования на ассемблере. Рассмотрены команды процессоров Интел, 16- и 32-разрядные регистры, основы работы с сопроцессором, сегментация памяти в реальном масштабе времени, управление клавиатурой и последовательным портом, работа с дисками и многое иное. Описано, как разработать безвредный нерезидентный вирус и антивирус против этого вируса, как написать файловую оболочку (типа Norton Commander или FAR Manager) и как писать резидентные утилиты.
Оглавление книги
1
Несколько советов 3
ЧАСТЬ I. ЗНАКОМЬТЕСЬ: АССЕМБЛЕР
7
Глава 1. Первая программа
9
1.1. Шестнадцатеричная система счисления 12
1.3. Введение в прерывания 16
Глава 2. Регистры процессора
17
2.1. Введение в регистры микропроцессоров 8086—80186 17
2.1.2. Регистры-указатели 18
2.2. Команды сложения и вычитания 19
2.2.2. Оператор sub 20
2.2.4. Оператор dec 21
Глава 3. Сегментация памяти в реальном режиме
23
3.1. Двоичная система счисления. Бит и байт 25
3.1.2. Как перевести десятичное число в двоичное 26
3.2. Сегментация памяти в реальном режиме 28
3.3. Наше первое прерывание 32
3.4. Программа для практики 34
ЧАСТЬ II. УСЛОЖНЯЕМ ЗАДАЧИ
37
Глава 4. Создание циклов
39
4.1. Еще немного о сегментации памяти 39
4.2. Создание циклов 43
4.3. Условный и безусловный переходы 45
4.4. Программа для практики 46
Глава 5. Подпрограммы
47
5.1. Исправляем ошибку 48
5.3. Программа для практики 53
Глава 6. Работа со стеком
54
6.1. Стек 61
6.2.1. Оператор nop 62
Глава 7. Операторы сравнения
64
7.1. Разбор программы из главы 6 66
7.3. Понятия условного и безусловного переходов 69
7.5. Программа для практики 74
8.2. Основы работы с файлами 82
Глава 9. Работа с файлами
84
9.1. Программа из прошлой главы 87
ЧАСТЬ III. ФАЙЛОВАЯ ОБОЛОЧКА, ВИРУС, РЕЗИДЕНТ
91
Глава 10. Введение в вирусологию. Обработчик прерываний
93
10.1. Программа из прошлой главы 97
10.2.1. Структура и принцип работы вируса 98
Какой объем памяти занимает вирус? 98
Какой вирус мы будем изучать? 98
Как оформляется вирус? 99
10.3.1. Подробней о прерываниях 101
10.4.1. Новые операторы и функции прерываний 104
10.5.1. Как проверить работу программы? 109
11.2. Управление видеокартой 115
12.2. Проверка на повторную загрузку резидента 118
12.4. Использование xor и sub для быстрого обнуления регистров 126
Глава 13. Поиск и считывание файлов: вирус
127
13.1. Теория 128
13.3. Команда пересылки данных movs 134
13.5. Поиск файлов 137
14.1.1. Почему мы пишем только файлы типа COM? 137
14.2. Оболочка SuperShell 139
14.2.2. Операторы работы со стеком процессора 80286+ 142
14.3.1. Прямое отображение в видеобуфер 143
Что такое линейный адрес и зачем он нужен? 145
14.5. Новые операторы 148
15.1.1. Сохранение предыдущего вектора прерывания 151
Первый способ 151
15.2. Инструкции ret и retf 152
15.2.2. Оператор retf 155
15.4. Практика 159
15.5.1. Оператор or 160
15.5.3. Оператор xor 162
15.6.1. Аппаратное прерывание 05h 162
15.6.3. Аппаратное прерывание 1Ch 164
Глава 16. Принципы работы отладчиков
165
16.1. Как работает отладчик 165
16.2. Способы обойти отладку программы 170
16.3. Практика 174
17.2. Вирус 180
17.2.2. Передача управления "файлу-жертве" 183
18.2. Ошибка в главе 17 185
18.3.1. Передача данных процедуре через стек 192
18.3.3. Вычисление длины строки на стадии ассемблирования 193
18.3.5. Оператор scas 196
18.3.7. Вывод строки на экран путем прямого отображения в видеобуфер 199
Глава 19. Создание резидентного шпиона
200
19.1. Резидент 204
Глава 20. Финальная версия вируса
205
20.1. Вирус 206
20.1.2. Заражение файла 210
20.2. Резюме 213
21.1.1. Теория 214
Новшество первое 215
21.1.3. Оператор test 219
21.2.1. Управление памятью 222
Глава 22. Часто задаваемые вопросы
223
Глава 23. Область PSP и DTA. Системные переменные (окружение DOS)
225
23.1. Структура командной строки 227
23.3. Основной резидент 232
23.3.2. Команды управления флагами 235
23.4. Задание для закрепления сведений из данной главы 238
24.1.1. 16- и 32-разрядные отладчики 241
24.1.3. Сопоставление ассемблера и языков высокого уровня 242
24.3. Резюме 248
25.2. Введение в работу с сопроцессором 254
25.4. Вывод десятичного числа с помощью сопроцессора 256
25.5.1. Получение и вывод длинного имени файла 258
26.2. С чего все начиналось 260
26.3.1. Чтение файлов из каталога и размещение их в отведенной памяти 262
Глава 27. Удаление резидента из памяти
264
27.1. Обзор последнего резидента 264
27.1.2. Как удалять загруженный резидент из памяти? 268
27.2. Практика 271
28.2. Процедура вывода имен файлов на экран 274
28.4. Обработка клавиш
и 276
Глава 29. Загрузка и запуск программ
278
29.1. Подготовка к запуску программы и ее загрузка 279
Зачем необходимо урезать память перед загрузкой? 280
А для чего увеличиваем bx на единицу (3)? 280
29.1.3. Подготовка EPB 282
Для чего нужно создавать свое окружение DOS? 283
Первый и второй адрес блоков FCB 284
29.1.5. Запуск программы 286
Глава 30. Работа с расширенной памятью
288
30.1. Расширенная (XMS) память. Общие принципы 289
30.2.1. Подготовка к использованию расширенной памяти и вывод объема XMS-памяти 291
30.3.1. Работа с расширенной памятью 293
30.4. Программа XMScopy.asm. Копирование файла с использованием расширенной памяти 296
31.1.1. Вызов внешних вспомогательных программ 298
31.2. Антивирусные возможности оболочки 299
31.2.2. Как защитить компьютер от программ-разрушителей дисковой информации 302
32.1.1. Таблица разделов жесткого диска 303
32.1.3. Таблица размещения файлов (FAT) 305
32.3. Ошибки файловой системы 306
П Р И Л О Ж Е Н И Я 309
П1.1. Загрузка MASM 6.10—6.13 309
П1.3. Компоновка 311
Приложение 2. Типичные ошибки при ассемблировании программы 313
П3.1. Основные символы ASCII 320
П3.3. Скан-коды клавиатуры 324
Предметный указатель 325
VI Оглавление VII Оглавление