Подробно и доходчиво объясняются все основные вопросы программирования на ассемблере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, основы работы с сопроцессором, сегментация памяти в реальном масштабе времени, управление клавиатурой и последовательным портом, работа с дисками и многое другое. Описано, как разработать безобидный нерезидентный вирус и антивирус против этого вируса, как написать файловую оболочку (типа Norton Commander или FAR Manager) и как писать резидентные программы.
Каждая глава состоит из объяснения новой темы, описания алгоритмов программ, многочисленных примеров и ответов на часто задаваемые вопросы. Во второе издание внесены исправления и добавлены новые примеры. Компакт-диск содержит исходные коды всех примеров, приведенных в книге, с подробными описаниями.
Author(s): Калашников О.А.
Edition: 2, переработанное и дополненное
Publisher: БХВ-Петербург
Year: 2011
Language: Russian
Commentary: eBook
Pages: 336
City: Санкт-Петербург
Tags: Информатика и вычислительная техника;Информатика (программирование);Программирование на ASSEMBLER;
Оглавление......3
Предисловие......9
Несколько советов......10
Ответы на некоторые вопросы......11
Часть I. Знакомьтесь: ассемблер......14
1.1. Шестнадцатеричная система счисления......15
1.2. Наша первая программа......18
1.3. Введение в прерывания......19
1.4. Резюме......22
2.1.1. Регистры данных......23
2.1.3. Сегментные регистры......24
2.2.2. Оператор sub......25
2.2.3. Оператор inc......26
2.3. Программа для практики......27
3.1. Двоичная система счисления. Бит и байт......29
3.1.2. Как перевести десятичное число в двоичное......31
3.2. Сегментация памяти в реальном режиме......32
3.2.1. Исследование программы в отладчике......34
3.3.1. Что такое ASCII?......38
3.4. Программа для практики......39
3.5. Подведем итоги......40
Часть II. Усложняем задачи......42
4.1.2. Введение в адресацию......43
4.2. Создание циклов......46
4.2.1. Пример высокоуровневой оптимизации......47
4.3. Условный и безусловный переходы......48
4.4. Программа для практики......49
4.4.1. Принцип работы программы......50
5.1. Исправляем ошибку......51
5.2. Подпрограммы......52
5.3. Программа для практики......55
5.4. Несколько слов об отладчике AFD......57
6.1. Стек......58
6.2.1. Оператор nop......65
6.2.2. Хитрая программа......66
7.1. Разбор программы из главы 6......68
7.2. Оператор сравнения......70
7.4. Расширенные коды ASCII......73
7.5. Программа для практики......75
8.1. Программа из прошлой главы......78
8.2. Основы работы с файлами......80
8.3. Программа для практики......86
9.1. Программа из прошлой главы......88
9.2. Программа для практики......91
Часть III. Файловая оболочка, вирус, резидент......94
10.1. Программа из прошлой главы......95
10.2. Вирус......99
Как оформляется вирус?......100
10.3.1. Подробней о прерываниях......101
10.4. Первый обработчик прерывания......103
10.5. Работа с флагами процессора......106
10.5.1. Как проверить работу программы?......108
11.1. Оболочка......111
11.2. Управление видеокартой......114
12.2. Проверка на повторную загрузку резидента......117
12.3. Команды работы со строками......120
12.4. Использование xor и sub для быстрого обнуления регистров......127
12.5. Задание для освоения информации из данной главы......128
13.1. Теория......129
13.2. Практика......130
13.3. Команда пересылки данных movs......134
13.4. Передача управления программе, расположенной в другом сегменте......136
13.5. Поиск файлов......137
14.1.2. Что такое модель памяти и какие модели бывают?......139
14.2.1. Управление курсором......141
14.2.2. Операторы работы со стеком процессора 80286+......142
14.3.1. Прямое отображение в видеобуфер......144
14.3.2. Процедура Draw_frame......145
Что такое линейный адрес и зачем он нужен?......146
14.5. Новые операторы......147
15.1. Теория......150
15.1.1. Сохранение предыдущего вектора прерывания......152
Второй способ......153
15.2.1. Оператор ret......154
15.2.2. Оператор retf......155
15.3. Механизм работы аппаратных прерываний. Оператор iret......157
15.4. Практика......159
15.5.1. Оператор or......161
15.5.2. Оператор and......162
15.5.3. Оператор xor......163
15.6.2. Аппаратное прерывание 09h......164
15.6.3. Аппаратное прерывание 1Ch......165
15.7. Резюме......166
16.1.1. Прерывание 03h......167
16.2.1. Таблица векторов прерываний......172
16.3. Практика......174
17.1. Определение текущего смещения выполняемого кода......176
17.2. Вирус......178
17.2.1. Первые байты "файла-жертвы"......182
17.2.2. Передача управления "файлу-жертве"......183
18.1. Пример высокоуровневой оптимизации......185
18.2. Ошибка в главе 17......186
18.3.1. Передача данных процедуре через стек......187
18.3.3. Вычисление длины строки на стадии ассемблирования......194
18.3.4. Процедуры Copy_scr / Restore_scr (display.asm)......195
18.3.5. Оператор scas......196
18.3.6. Подсчет длины нефиксированной строки......198
18.3.7. Вывод строки на экран путем прямого отображения в видеобуфер......200
18.4. Резюме......201
19.1. Резидент......202
19.2. Что нужно вам вынести из этой главы?......206
Глава 20. Финальная версия вируса......207
20.1.1. Альтернативы ret, call и jmp......208
20.1.2. Заражение файла......209
20.1.3. Общая схема работы вируса......212
20.2. Резюме......213
21.1.1. Теория......215
Новшество первое......216
21.1.3. Оператор test......217
21.2.1. Управление памятью......221
21.2.2. Считываем файлы в отведенную память......224
Глава 22. Часто задаваемые вопросы......225
Глава 23. Область PSP и DTA. Системные переменные (окружение DOS)......227
23.1. Структура командной строки......228
23.2. Системные переменные (окружение MS-DOS)......229
23.3. Основной резидент......233
23.3.1. Команды безусловного перехода......234
23.3.2. Команды управления флагами......235
23.3.3. Изменение параметров резидента "на лету"......237
23.4. Задание для закрепления сведений из данной главы......239
24.1. Регистры микропроцессоров 80386/80486. Хранение чисел в памяти......240
24.1.1. 16- и 32-разрядные отладчики......242
24.1.3. Сопоставление ассемблера и языков высокого уровня......243
24.2. Резидентный антивирус. Практика......244
24.3. Резюме......249
25.1. Ответы на некоторые вопросы......250
25.2. Введение в работу с сопроцессором......251
25.3. Первая программа с использованием сопроцессора......256
25.4. Вывод десятичного числа с помощью сопроцессора......257
25.5.1. Получение и вывод длинного имени файла......258
26.1. Краткая история развития IBM-совместимых компьютеров......260
26.2. С чего все начиналось......261
26.3. Оболочка......262
26.3.1. Чтение файлов из каталога и размещение их в отведенной памяти......263
26.3.2. Размещение файлов в памяти нашей оболочки......264
27.1.1. Перехват прерывания 21h......266
27.1.2. Как удалять загруженный резидент из памяти?......269
27.1.3. Случаи, когда резидент удалить невозможно......270
27.2. Практика......271
28.1. Новый алгоритм считывания файлов в память......273
28.2. Процедура вывода имен файлов на экран......275
28.3. Новые переменные в оболочке......276
28.5. Обработка клавиш и ......278
29.1. Подготовка к запуску программы и ее загрузка......280
Зачем необходимо урезать память перед загрузкой?......281
29.1.2. Переносим стек в область PSP......282
29.1.3. Подготовка EPB......283
Еще несколько слов о системных переменных (сегменте окружения DOS)......284
Сегмент и смещение командной строки......285
29.1.4. Сохранение регистров......286
29.1.5. Запуск программы......287
29.2. "Восстановительные работы"......288
30.1. Расширенная (XMS) память. Общие принципы......290
30.2.1. Подготовка к использованию расширенной памяти и вывод объема XMS-памяти......291
30.3. Программа XMSblock.asm. Чтение файла в расширенную память и вывод его на экран......293
30.3.2. Структура массива при работе с XMS-памятью......295
30.4. Программа XMScopy.asm. Копирование файла с использованием расширенной памяти......296
31.1. Оболочка Super Shell......298
31.1.1. Вызов внешних вспомогательных программ......299
31.1.2. Редактирование файла......300
31.2.1. Как защитить компьютер от заражения его резидентными вирусами......301
31.2.2. Как защитить компьютер от программ-разрушителей дисковой информации......302
32.1.1. Таблица разделов жесткого диска......304
32.1.2. Загрузочный сектор......305
32.1.3. Таблица размещения файлов (FAT)......306
32.2. Удаление и восстановление файла......307
32.3.1. Потерянные кластеры файловой системы FAT, FAT32......308
Приложения......309
П1.2. Ассемблирование......310
П1.3. Компоновка......311
П1.3.1. Ассемблирование и компоновка программ пакетами Microsoft (MASM)......312
Приложение 2. Типичные ошибки при ассемблировании программы......313
П3.1. Основные символы ASCII......314
П3.2. Расширенные коды ASCII......321
П3.3. Скан-коды клавиатуры......323
Приложение 4. Содержимое компакт-диска......325
Предметный указатель......326