Файл: О.А.Калашников. Ассемблер Это Просто. Учимся программировать.pdf
Добавлен: 16.02.2019
Просмотров: 29189
Скачиваний: 1689
Оглавление
VI
16.2. Способы обойти отладку программы ............................................................................... 170
16.2.1. Таблица векторов прерываний................................................................................... 170
16.3. Практика ............................................................................................................................. 172
Глава 17. Заражение файлов вирусом ................................................................................... 174
17.1. Определение текущего смещения выполняемого кода .................................................. 174
17.2. Вирус ................................................................................................................................... 176
17.2.1. Первые байты "файла-жертвы" .................................................................................. 180
17.2.2. Передача управления "файлу-жертве" ...................................................................... 181
Глава 18. Высокоуровневая оптимизация программ ........................................................ 183
18.1. Пример высокоуровневой оптимизации .......................................................................... 183
18.2. Ошибка в главе 17 .............................................................................................................. 184
18.3. Оболочка Super Shell ......................................................................................................... 185
18.3.1. Передача данных процедуре через стек .................................................................... 185
18.3.2. Передача параметров в стеке ..................................................................................... 192
18.3.3. Вычисление длины строки на стадии ассемблирования.......................................... 192
18.3.4. Процедуры Copy_scr / Restore_scr (display.asm) ...................................................... 193
18.3.5. Оператор scas .............................................................................................................. 194
18.3.6. Подсчет длины нефиксированной строки ................................................................. 196
18.3.7. Вывод строки на экран путем прямого отображения в видеобуфер ...................... 198
18.4. Резюме ................................................................................................................................ 199
Глава 19. Создание резидентного шпиона ........................................................................... 200
19.1. Резидент .............................................................................................................................. 200
19.2. Что нужно вам вынести из этой главы? ........................................................................... 204
Глава 20. Финальная версия вируса ..................................................................................... 205
20.1. Вирус ................................................................................................................................... 206
20.1.1. Альтернативы ret, call и jmp ....................................................................................... 206
20.1.2. Заражение файла ......................................................................................................... 207
20.1.3. Общая схема работы вируса ...................................................................................... 210
20.2. Резюме ................................................................................................................................ 211
Глава 21. Работа с блоками основной памяти .................................................................... 213
21.1. Оболочка SuperShell .......................................................................................................... 213
21.1.1. Теория .......................................................................................................................... 213
21.1.2. Практика ...................................................................................................................... 214
Новшество первое ............................................................................................................... 214
Новшество второе ............................................................................................................... 215
21.1.3. Оператор test................................................................................................................ 215
21.2. Работа с основной памятью DOS ..................................................................................... 219
21.2.1. Управление памятью .................................................................................................. 219
21.2.2. Считываем файлы в отведенную память .................................................................. 222
Глава 22. Часто задаваемые вопросы ................................................................................... 223
Глава 23. Область PSP и DTA. Системные переменные (окружение DOS) ................... 225
23.1. Структура командной строки ............................................................................................ 226
23.2. Системные переменные (окружение MS-DOS) ............................................................... 227
23.3. Основной резидент ............................................................................................................ 231
23.3.1. Команды безусловного перехода ............................................................................... 232
Оглавление
VII
23.3.2. Команды управления флагами ................................................................................... 233
23.3.3. Изменение параметров резидента "на лету" ............................................................. 235
23.4. Задание для закрепления сведений из данной главы ...................................................... 237
Глава 24. Резидентный антивирус ........................................................................................ 238
24.1. Регистры микропроцессоров 80386/80486. Хранение чисел в памяти ......................... 238
24.1.1. 16- и 32-разрядные отладчики ................................................................................... 240
24.1.2. Директива use16/use32 ................................................................................................ 241
24.1.3. Сопоставление ассемблера и языков высокого уровня ........................................... 241
24.2. Резидентный антивирус. Практика ................................................................................... 242
24.3. Резюме ................................................................................................................................ 247
Глава 25. Работа с сопроцессором ......................................................................................... 248
25.1. Ответы на некоторые вопросы ......................................................................................... 248
25.2. Введение в работу с сопроцессором ................................................................................ 249
25.3. Первая программа с использованием сопроцессора ....................................................... 254
25.4. Вывод десятичного числа с помощью сопроцессора ..................................................... 255
25.5. Оболочка ............................................................................................................................. 256
25.5.1. Получение и вывод длинного имени файла .............................................................. 256
Глава 26. История развития ПК ............................................................................................ 258
26.1. Краткая история развития IBM-совместимых компьютеров ......................................... 258
26.2. С чего все начиналось ....................................................................................................... 259
26.3. Оболочка ............................................................................................................................. 260
26.3.1. Чтение файлов из каталога и размещение их в отведенной памяти ....................... 261
26.3.2. Размещение файлов в памяти нашей оболочки ........................................................ 262
Глава 27. Удаление резидента из памяти ............................................................................. 264
27.1. Обзор последнего резидента ............................................................................................. 264
27.1.1. Перехват прерывания 21h .......................................................................................... 264
27.1.2. Как удалять загруженный резидент из памяти? ....................................................... 267
27.1.3. Случаи, когда резидент удалить невозможно ........................................................... 268
27.2. Практика ............................................................................................................................. 269
Глава 28. Алгоритм считывания имен файлов в память ................................................. 271
28.1. Новый алгоритм считывания файлов в память ............................................................... 271
28.2. Процедура вывода имен файлов на экран ........................................................................ 273
28.3. Новые переменные в оболочке ......................................................................................... 274
28.4. Обработка клавиш <PageUp> и <PageDown> .................................................................. 276
28.5. Обработка клавиш <Home> и <End> ............................................................................... 276
Глава 29. Загрузка и запуск программ ................................................................................. 278
29.1. Подготовка к запуску программы и ее загрузка .............................................................. 278
29.1.1. Выделяем память для загружаемой программы ....................................................... 279
Зачем необходимо урезать память перед загрузкой? ....................................................... 279
Зачем во второй строке мы сдвигаем на 4 бита вправо это смещение? ......................... 280
А для чего увеличиваем bx на единицу (3)?...................................................................... 280
29.1.2. Переносим стек в область PSP ................................................................................... 280
29.1.3. Подготовка EPB .......................................................................................................... 281
Еще несколько слов о системных переменных (сегменте окружения DOS) ................. 282
Для чего нужно создавать свое окружение DOS? ............................................................ 283
Сегмент и смещение командной строки ........................................................................... 283
Первый и второй адрес блоков FCB .................................................................................. 284
Оглавление
VIII
29.1.4. Сохранение регистров ................................................................................................ 284
29.1.5. Запуск программы ....................................................................................................... 285
29.2. "Восстановительные работы" ........................................................................................... 286
Глава 30. Работа с расширенной памятью .......................................................................... 288
30.1. Расширенная (XMS) память. Общие принципы .............................................................. 288
30.2. Программа XMSmem.asm. Получение объема XMS-памяти ......................................... 289
30.2.1. Подготовка к использованию расширенной памяти
и вывод объема XMS-памяти ..................................................................................... 289
30.3. Программа XMSblock.asm. Чтение файла в расширенную память
и вывод его на экран .......................................................................................................... 291
30.3.1. Работа с расширенной памятью ................................................................................. 293
30.3.2. Структура массива при работе с XMS-памятью ...................................................... 293
30.4. Программа XMScopy.asm. Копирование файла с использованием
расширенной памяти ......................................................................................................... 294
Глава 31. Обзор дополнительных возможностей оболочки ............................................. 296
31.1. Оболочка Super Shell ......................................................................................................... 296
31.1.1. Вызов внешних вспомогательных программ ........................................................... 297
31.1.2. Редактирование файла ................................................................................................ 298
31.2. Антивирусные возможности оболочки ............................................................................ 299
31.2.1. Как защитить компьютер от заражения его резидентными вирусами ................... 299
31.2.2. Как защитить компьютер от программ-разрушителей дисковой информации ..... 300
Глава 32. Все о диске и файловой системе ............................................................. 302
32.1. Что находится на диске? ................................................................................................... 302
32.1.1. Таблица разделов жесткого диска ............................................................................. 302
32.1.2. Загрузочный сектор .................................................................................................... 303
32.1.3. Таблица размещения файлов (FAT) .......................................................................... 304
32.2. Удаление и восстановление файла ................................................................................... 305
32.3. Ошибки файловой системы............................................................................................... 306
32.3.1. Потерянные кластеры файловой системы FAT, FAT32 .......................................... 306
П Р И Л О Ж Е Н И Я ............................................................................................................... 307
Приложение 1. Ассемблирование программ (получение машинного кода
из ассемблерного листинга) .................................................................................................... 309
П1.1. Загрузка MASM 6.10—6.13 .............................................................................................. 309
П1.2. Ассемблирование .............................................................................................................. 309
П1.3. Компоновка ....................................................................................................................... 310
П1.3.1. Ассемблирование и компоновка программ пакетами Microsoft (MASM) ............ 311
Приложение 2. Типичные ошибки при ассемблировании программы .......................... 312
Приложение 3. Таблицы и коды символов .......................................................................... 313
П3.1. Основные символы ASCII ................................................................................................ 313
П3.2. Расширенные коды ASCII ................................................................................................ 320
П3.3. Скан-коды клавиатуры ..................................................................................................... 322
Приложение 4. Содержимое компакт-диска ........................................................................ 324
Предметный указатель ............................................................................................................ 325
Предисловие
Итак, вы решили начать изучение языка ассемблера. Возможно, вы уже пробо-
вали его изучать, но так и не смогли освоить до конца, поскольку он показался вам
очень трудным. Обилие новых, неизвестных читателю терминов и сложность язы-
ка, которым написаны многие книги, делают их трудными для начинающих про-
граммистов. В этой книге автор старался излагать материал так, чтобы он был по-
нятен любому пользователю: и начинающему программисту, и человеку, который
ни разу не сталкивался ни с каким языком программирования.
Основой для книги послужили материалы разработанной автором рассылки
"Ассемблер? Это просто! Учимся программировать". Используя данную рассылку,
более 18 000 подписчиков научились писать такие программы на ассемблере, кото-
рые казались им раньше чрезвычайно сложными и недоступными для понимания
или написания. Большая часть подписчиков пыталась раньше изучать язык ассемб-
лера, но так и не смогла пройти полный курс (прочитать ту или иную книгу до
конца). Материал рассылки помог им понять ассемблер и научил писать довольно-
таки сложные программы под операционными системами MS-DOS и Windows.
Во втором издании автор учел и исправил все недоработки и ошибки, допущен-
ные в первом. Более того, автор попытался сделать обучение как можно более ин-
тересным для вас, перейдя с первой же главы к практической части. Это поможет
вам изучить базовые основы ассемблера за короткое время.
Автор не претендует на то, что материал, изложенный в данной книге, поможет
вам освоить ассемблер во всех его проявлениях и покажет все возможности языка.
Ассемблер настолько многогранен, что просто невозможно подробно описать все
его операторы, команды, алгоритмы, области применения в одной книге. Тем не
менее, прочитав уже несколько глав, вы сможете научиться писать собственные
программы, разбирать чужие, а также поймете, как в целом работает компьютер.
Уникальность этой книги заключается в следующем:
в части I книги рассматриваются базовые операторы ассемблера, основы про-
граммирования в реальном режиме (консольные приложения), в части II — ос-
новы программирования на ассемблере под Windows; в части III — как создать
файловую оболочку и написать/нейтрализовать резидентный вирус;
каждая глава соответствует одному занятию, в конце главы приводится файл
для практического изучения;
Предисловие
2
материал изложен на простом языке, все новые термины подробно объясняются;
исследуется работа отладчиков и способы обойти отладку программы;
в процессе изучения ассемблера, начиная с главы 10, рассматриваются четыре
программы:
безобидный нерезидентный вирус;
резидентный антивирус против написанного нами вируса;
файловая оболочка (типа Norton Commander®, FAR Manager® и т. п.) с под-
держкой длинных имен файлов и использованием XMS-памяти;
несколько видов резидентных программ (программ, которые постоянно на-
ходятся в памяти).
В ассемблере, как и в любом другом языке программирования, очень важна
практика и опыт. На компакт-диске, прилагаемом к книге, приводятся готовые ас-
семблерные файлы в текстовом формате с подробными описаниями для практиче-
ского изучения курса, а также необходимое ПО. На прилагаемом диске автор по-
старался собрать все, что нужно для полноценного изучения материала.
Несколько советов
Обязательно скачайте файлы-приложения для практического изучения курса,
а также необходимое ПО с сайта http://www.Kalashnikoff.ru (если таковых
нет). Без практики и вспомогательных программ данная книга вряд ли поможет
вам научиться программировать на ассемблере.
Чаще пользуйтесь отладчиком.
Изменяйте код программ (файлов-приложений), больше экспериментируйте.
Пробуйте написать собственную программу на основе изученного материала.
Так как вначале будет довольно сложно ориентироваться в обилии инструкций,
директив, прерываний, процедур ассемблера, то пробуйте вставлять в ваши собст-
венные программы выдержки, процедуры, алгоритмы из файлов-приложений.
Помните, что опыт приходит со временем!
Внимательно следите за ходом мысли автора, за его логикой. Это особенно ак-
туально при чтении частей II и III.
Не спешите! Внимательно и досконально изучайте каждую главу, выполняйте
все, что автор просит сделать с прилагаемыми программами (запускать их под от-
ладчиком, изменять код, думать над тем, что делает та или иная процедура и пр.).
Все вопросы, которые у вас, несомненно, возникнут в процессе изучения ас-
семблера, вы можете задавать в любое время экспертам на портале профессио-
налов http://RFpro.ru. Этот сайт был специально разработан автором книги
с целью оказания посетителям помощи по разным направлениям, в том числе
и по ассемблеру.