Файл: О.А.Калашников. Ассемблер Это Просто. Учимся программировать.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Программирование

Добавлен: 16.02.2019

Просмотров: 27809

Скачиваний: 1634

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Оглавление 

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. Альтернативы retcall и 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 


background image

Оглавление 

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 


background image

Оглавление 

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 


background image

 

 

 

  

 

Предисловие 
 

 
Итак, вы решили начать изучение языка ассемблера. Возможно, вы уже пробо-

вали его изучать, но так и не смогли освоить до конца, поскольку он показался вам 
очень трудным. Обилие новых, неизвестных читателю терминов и сложность язы-
ка,  которым  написаны  многие  книги,  делают  их  трудными  для  начинающих  про-
граммистов. В этой книге автор старался излагать материал так, чтобы он был по-
нятен любому пользователю: и начинающему программисту, и человеку, который 
ни разу не сталкивался ни с каким языком программирования. 

Основой  для  книги  послужили  материалы  разработанной  автором  рассылки 

"Ассемблер? Это просто! Учимся программировать". Используя данную рассылку, 
более 18 000 подписчиков научились писать такие программы на ассемблере, кото-
рые  казались  им  раньше  чрезвычайно  сложными  и  недоступными  для  понимания 
или написания. Большая часть подписчиков пыталась раньше изучать язык ассемб-
лера,  но  так  и  не  смогла  пройти  полный  курс  (прочитать  ту  или  иную  книгу  до 
конца). Материал рассылки помог им понять ассемблер и научил писать довольно-
таки сложные программы под операционными системами MS-DOS и Windows. 

Во втором издании автор учел и исправил все недоработки и ошибки, допущен-

ные в первом. Более того, автор попытался сделать обучение как можно более ин-
тересным для вас, перейдя с первой же главы к практической части. Это поможет 
вам изучить базовые основы ассемблера за короткое время. 

Автор не претендует на то, что материал, изложенный в данной книге, поможет 

вам освоить ассемблер во всех его проявлениях и покажет все возможности языка. 
Ассемблер  настолько  многогранен,  что  просто  невозможно  подробно  описать  все 
его  операторы,  команды,  алгоритмы,  области  применения  в  одной  книге.  Тем  не 
менее,  прочитав  уже  несколько  глав,  вы  сможете  научиться  писать  собственные 
программы, разбирать чужие, а также поймете, как в целом работает компьютер. 

Уникальность этой книги заключается в следующем: 

 

в  части I  книги  рассматриваются  базовые  операторы  ассемблера,  основы  про-
граммирования в реальном режиме (консольные приложения), в части II — ос-
новы программирования на ассемблере под Windows; в части III — как создать 
файловую оболочку и написать/нейтрализовать резидентный вирус; 

 

каждая  глава  соответствует  одному  занятию,  в  конце  главы  приводится  файл 
для практического изучения; 


background image

Предисловие 

 

материал изложен на простом языке, все новые термины подробно объясняются; 

 

исследуется работа отладчиков и способы обойти отладку программы; 

 

в  процессе  изучения  ассемблера,  начиная  с  главы  10,  рассматриваются  четыре 
программы: 

 

безобидный нерезидентный вирус; 

 

резидентный антивирус против написанного нами вируса; 

 

файловая оболочка (типа Norton Commander®, FAR Manager® и т. п.) с под-
держкой длинных имен файлов и использованием XMS-памяти; 

 

несколько  видов  резидентных  программ  (программ,  которые  постоянно  на-
ходятся в памяти). 

В  ассемблере,  как  и  в  любом  другом  языке  программирования,  очень  важна 

практика и опыт. На компакт-диске, прилагаемом к книге, приводятся готовые ас-
семблерные файлы в текстовом формате с подробными описаниями для практиче-
ского  изучения  курса,  а  также необходимое ПО. На прилагаемом диске автор по-
старался собрать все, что нужно для полноценного изучения материала. 

 

Несколько советов 

 

Обязательно  скачайте  файлы-приложения  для  практического  изучения  курса,  
а  также  необходимое  ПО  с  сайта  http://www.Kalashnikoff.ru  (если  таковых 
нет). Без практики и вспомогательных программ данная книга вряд ли поможет 
вам научиться программировать на ассемблере. 

 

Чаще пользуйтесь отладчиком. 

 

Изменяйте код программ (файлов-приложений), больше экспериментируйте. 

 

Пробуйте написать собственную программу на основе изученного материала. 

 

Так как  вначале  будет  довольно  сложно  ориентироваться  в  обилии  инструкций, 
директив, прерываний, процедур ассемблера, то пробуйте вставлять в ваши собст-
венные  программы  выдержки,  процедуры,  алгоритмы  из  файлов-приложений. 
Помните, что опыт приходит со временем! 

 

Внимательно следите за ходом мысли автора, за его логикой. Это особенно ак-
туально при чтении частей II и III

 

Не  спешите!  Внимательно  и  досконально  изучайте  каждую  главу,  выполняйте 
все, что автор просит сделать с прилагаемыми программами (запускать их под от-
ладчиком, изменять код, думать над тем, что делает та или иная процедура и пр.). 

 

Все  вопросы,  которые  у  вас,  несомненно,  возникнут  в  процессе  изучения  ас-
семблера, вы можете задавать в любое время экспертам на портале профессио-
налов  http://RFpro.ru.  Этот  сайт  был  специально  разработан  автором  книги  
с  целью  оказания  посетителям  помощи  по  разным  направлениям,  в  том  числе  
и по ассемблеру.