Содержание: Предисловие Несколько советов
Ответы на некоторые вопросы
Часть I. Знакомьтесь: ассемблер Глава 1. Первая программа 1.1. Шестнадцатеричная система счисления
1.2. Наша первая программа
1.3. Введение в прерывания
1.4. Резюме
Глава 2. Регистры процессора 2.1. Введение в регистры микропроцессоров 8086-80186
2.1.1. Регистры данных
2.1.2. Регистры-указатели
2.1.3. Сегментные регистры
2.2. Команды сложения и вычитания
2.2.1. Оператор
add 2.2.2. Оператор
sub 2.2.3. Оператор
inc 2.2.4. Оператор
dec 2.3. Программа для практики
Глава 3. Сегментация памяти в реальном режиме 3.1. Двоичная система счисления. Бит и байт
3.1.1. Как перевести двоичное число в десятичное
3.1.2. Как перевести десятичное число в двоичное
3.1.3. Как перевести шестнадцатеричное число в десятичное
3.2. Сегментация памяти в реальном режиме
3.2.1. Исследование программы в отладчике
3.3. Наше первое прерывание
3.3.1. Что такое ASCII?
3.4. Программа для практики
3.5. Подведем итоги
Часть II. Усложняем задачи Глава 4. Создание циклов 4.1. Еще немного о сегментации памяти
4.1.2. Введение в адресацию
4.2. Создание циклов
4.2.1. Пример высокоуровневой оптимизации
4.3. Условный и безусловный переходы
4.3.1. Пример низкоуровневой оптимизации
4.4. Программа для практики
4.4.1. Принцип работы программы
Глава 5. Подпрограммы 5.1. Исправляем ошибку
5.2. Подпрограммы
5.3. Программа для практики
5.4. Несколько слов об отладчике AFD
Глава 6. Работа со стеком 6.1. Стек
6.2. Программа для практики
6.2.1. Оператор
nop 6.2.2. Хитрая программа
Глава 7. Операторы сравнения 7.1. Разбор программы из
главы 6 7.2. Оператор сравнения
7.3. Понятия условного и безусловного переходов
7.4. Расширенные коды ASCII
7.5. Программа для практики
Глава 8. Учимся работать с файлами 8.1. Программа из прошлой главы
8.2. Основы работы с файлами
8.3. Программа для практики
Глава 9. Работа с файлами 9.1. Программа из прошлой главы
9.2. Программа для практики
Часть III. Файловая оболочка, вирус, резидент Глава 10. Введение в вирусологию. Обработчик прерываний 10.1. Программа из прошлой главы
10.2. Вирус
10.2.1. Структура и принцип работы вируса
Что должен делать вирус?
Какой объем памяти занимает вирус?
Что может вирус?
Какой вирус мы будем изучать?
Что будет делать вирус?
Как оформляется вирус?
10.3. Резидент
10.3.1. Подробней о прерываниях
10.4. Первый обработчик прерывания
10.4.1. Новые операторы и функции прерываний
10.5. Работа с флагами процессора
10.5.1. Как проверить работу программы?
Глава 11. Управление видеоадаптером 11.1. Оболочка
11.2. Управление видеокартой
Глава 12. Повторная загрузка резидента 12.1. Резидент
12.2. Проверка на повторную загрузку резидента
12.3. Команды работы со строками
12.4. Использование xor и sub для быстрого обнуления регистров
12.5. Задание для освоения информации из данной главы
Глава 13. Поиск и считывание файлов: вирус 13.1. Теория
13.2. Практика
13.3. Команда пересылки данных
movs 13.4. Передача управления программе, расположенной в другом сегменте
13.5. Поиск файлов
Глава 14. Вывод окна в центре экрана 14.1. Модели памяти
14.1.1. Почему мы пишем только файлы типа COM?
14.1.2. Что такое модель памяти и какие модели бывают?
14.2. Оболочка SuperShell
14.2.1. Управление курсором
14.2.2. Операторы работы со стеком процессора 80286+
14.3. Процедура рисования рамки (окна)
14.3.1. Прямое отображение в видеобуфер
14.3.2. Процедура
Draw_frame Что такое линейный адрес и зачем он нужен?
14.4. Практика
14.5. Новые операторы
Глава 15. Обработка аппаратных прерываний 15.1. Теория
15.1.1. Сохранение предыдущего вектора прерывания
15.1.2. Способы передачи управления на прежний адрес прерывания
Первый способ
Второй способ
15.2. Инструкции
ret и
retf 15.2.1. Оператор
ret 15.2.2. Оператор
retf 15.3. Механизм работы аппаратных прерываний. Оператор
iret 15.4. Практика
15.5. Логические команды процессора
15.5.1. Оператор
or 15.5.2. Оператор
and 15.5.3. Оператор
xor 15.6. Аппаратные прерывания нашего резидента
15.6.1. Аппаратное прерывание
05h 15.6.2. Аппаратное прерывание
09h 15.6.3. Аппаратное прерывание
1Ch 15.7. Резюме
Глава 16. Принципы работы отладчиков 16.1. Как работает отладчик
16.1.1. Прерывание
03h 16.2. Способы обойти отладку программы
16.2.1. Таблица векторов прерываний
16.3. Практика
Глава 17. Заражение файлов вирусом 17.1. Определение текущего смещения выполняемого кода
17.2. Вирус
17.2.1. Первые байты "файла-жертвы"
17.2.2. Передача управления "файлу-жертве"
Глава 18. Высокоуровневая оптимизация программ 18.1. Пример высокоуровневой оптимизации
18.2. Ошибка в
главе 17 18.3. Оболочка Super Shell
18.3.1. Передача данных процедуре через стек
18.3.2. Передача параметров в стеке
18.3.3. Вычисление длины строки на стадии ассемблирования
18.3.4. Процедуры
Copy_scr / Restore_scr (display.asm)
18.3.5. Оператор
scas 18.3.6. Подсчет длины нефиксированной строки
18.3.7. Вывод строки на экран путем прямого отображения в видеобуфер
18.4. Резюме
Глава 19. Создание резидентного шпиона 19.1. Резидент
19.2. Что нужно вам вынести из этой главы?
Глава 20. Финальная версия вируса 20.1. Вирус
20.1.1. Альтернативы
ret,
call и
jmp 20.1.2. Заражение файла
20.1.3. Общая схема работы вируса
20.2. Резюме
Глава 21. Работа с блоками основной памяти 21.1. Оболочка SuperShell
21.1.1. Теория
21.1.2. Практика
Новшество первое
Новшество второе
21.1.3. Оператор
test 21.2. Работа с основной памятью DOS
21.2.1. Управление памятью
21.2.2. Считываем файлы в отведенную память
Глава 22. Часто задаваемые вопросы Глава 23. Область PSP и DTA. Системные переменные (окружение DOS) 23.1. Структура командной строки
23.2. Системные переменные (окружение MS-DOS)
23.3. Основной резидент
23.3.1. Команды безусловного перехода
23.3.2. Команды управления флагами
23.3.3. Изменение параметров резидента "на лету"
23.4. Задание для закрепления сведений из данной главы
Глава 24. Резидентный антивирус 24.1. Регистры микропроцессоров 80386/80486. Хранение чисел в памяти
24.1.1. 16- и 32-разрядные отладчики
24.1.2. Директива
use16/use32 24.1.3. Сопоставление ассемблера и языков высокого уровня
24.2. Резидентный антивирус. Практика
24.3. Резюме
Глава 25. Работа с сопроцессором 25.1. Ответы на некоторые вопросы
25.2. Введение в работу с сопроцессором
25.3. Первая программа с использованием сопроцессора
25.4. Вывод десятичного числа с помощью сопроцессора
25.5. Оболочка
25.5.1. Получение и вывод длинного имени файла
Глава 26. История развития ПК 26.1. Краткая история развития IBM-совместимых компьютеров
26.2. С чего все начиналось
26.3. Оболочка
26.3.1. Чтение файлов из каталога и размещение их в отведенной памяти
26.3.2. Размещение файлов в памяти нашей оболочки
Глава 27. Удаление резидента из памяти 27.1. Обзор последнего резидента
27.1.1. Перехват прерывания
21h 27.1.2. Как удалять загруженный резидент из памяти?
27.1.3. Случаи, когда резидент удалить невозможно
27.2. Практика
Глава 28. Алгоритм считывания имен файлов в память 28.1. Новый алгоритм считывания файлов в память
28.2. Процедура вывода имен файлов на экран
28.3. Новые переменные в оболочке
28.4. Обработка клавиш
и
28.5. Обработка клавиш и
Глава 29. Загрузка и запуск программ
29.1. Подготовка к запуску программы и ее загрузка
29.1.1. Выделяем память для загружаемой программы
Зачем необходимо урезать память перед загрузкой?
Зачем во второй строке мы сдвигаем на 4 бита вправо это смещение?
А для чего увеличиваем bx на единицу (3)?
29.1.2. Переносим стек в область PSP
29.1.3. Подготовка EPB
Еще несколько слов о системных переменных (сегменте окружения DOS)
Для чего нужно создавать свое окружение DOS?
Сегмент и смещение командной строки
Первый и второй адрес блоков FCB
29.1.4. Сохранение регистров
29.1.5. Запуск программы
29.2. "Восстановительные работы"
Глава 30. Работа с расширенной памятью
30.1. Расширенная (XMS) память. Общие принципы
30.2. Программа XMSmem.asm. Получение объема XMS-памяти
30.2.1. Подготовка к использованию расширенной памяти и вывод объема XMS-памяти
30.3. Программа XMSblock.asm. Чтение файла в расширенную память и вывод его на экран
30.3.1. Работа с расширенной памятью
30.3.2. Структура массива при работе с XMS-памятью
30.4. Программа XMScopy.asm. Копирование файла с использованием расширенной памяти
Глава 31. Обзор дополнительных возможностей оболочки
31.1. Оболочка Super Shell
31.1.1. Вызов внешних вспомогательных программ
31.1.2. Редактирование файла
31.2. Антивирусные возможности оболочки
31.2.1. Как защитить компьютер от заражения его резидентными вирусами
31.2.2. Как защитить компьютер от программ-разрушителей дисковой информации
Глава 32. Все о диске и файловой системе
32.1. Что находится на диске?
32.1.1. Таблица разделов жесткого диска
32.1.2. Загрузочный сектор
32.1.3. Таблица размещения файлов (FAT)
32.2. Удаление и восстановление файла
32.3. Ошибки файловой системы
32.3.1. Потерянные кластеры файловой системы FAT, FAT32
ПРИЛОЖЕНИЯ
Приложение 1. Ассемблирование программ (получение машинного кода из ассемблерного листинга)
П1.1. Загрузка MASM 6.10-6.13
П1.2. Ассемблирование
П1.3. Компоновка
П1.3.1. Ассемблирование и компоновка программ пакетами Microsoft (MASM)
Приложение 2. Типичные ошибки при ассемблировании программы
Приложение 3. Таблицы и коды символов
П3.1. Основные символы ASCII
П3.2. Расширенные коды ASCII
П3.3. Скан-коды клавиатуры
Приложение 4. Содержимое компакт-диска
Предметный указатель