В корзину
Купить в 1 клик
Бесплатная доставка Новой Почтой
Отправка на следующий рабочий день
Отправка на следующий рабочий день
Описание
2011г.
Количество страниц: 366
Подробно и доходчиво в книге Ассемблер - это просто. Учимся программировать. 2-е изд. Калашников объясняются все основные вопросы программирования на ассемблере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, основы работы с сопроцессором, сегментация памяти в реальном масштабе времени, управление клавиатурой и последовательным портом, работа с дисками и многое другое. Описано, как разработать безобидный нерезидентный вирус и антивирус против этого вируса, как написать файловую оболочку (типа Norton Commander или FAR Manager) и как писать резидентные программы. Каждая глава состоит из объяснения новой темы, описания алгоритмов программ, многочисленных примеров и ответов на часто задаваемые вопросы. Во второе издание внесены исправления и добавлены новые примеры. Компакт-диск содержит исходные коды всех примеров, приведенных в книге, с подробными описаниями.
Оглавление книги
Оглавление Предисловие 1 Несколько советов 2 Ответы на некоторые вопросы 3 ЧАСТЬ I. ЗНАКОМЬТЕСЬ: АССЕМБЛЕР 7 Глава 1. Первая программа 9 1.1. Шестнадцатеричная система счисления 9 1.2. Наша первая программа 12 1.3. Введение в прерывания 13 1.4. Резюме 16 Глава 2. Регистры процессора 17 2.1. Введение в регистры микропроцессоров 8086—80186 17 2.1.1. Регистры данных 17 2.1.2. Регистры-указатели 18 2.1.3. Сегментные регистры 18 2.2. Команды сложения и вычитания 19 2.2.1. Оператор add 19 2.2.2. Оператор sub 19 2.2.3. Оператор inc 20 2.2.4. Оператор dec 21 2.3. Программа для практики 21 Глава 3. Сегментация памяти в реальном режиме 23 3.1. Двоичная система счисления. Бит и байт 23 3.1.1. Как перевести двоичное число в десятичное 25 3.1.2. Как перевести десятичное число в двоичное 25 3.1.3. Как перевести шестнадцатеричное число в десятичное 26 3.2. Сегментация памяти в реальном режиме 26 3.2.1. Исследование программы в отладчике 28 3.3. Наше первое прерывание 32 3.3.1. Что такое ASCII? 32 3.4. Программа для практики 33 3.5. Подведем итоги 34 ЧАСТЬ II. УСЛОЖНЯЕМ ЗАДАЧИ 37 Глава 4. Создание циклов 39 4.1. Еще немного о сегментации памяти 39 4.1.2. Введение в адресацию 39 4.2. Создание циклов 42 4.2.1. Пример высокоуровневой оптимизации 43 4.3. Условный и безусловный переходы 44 4.3.1. Пример низкоуровневой оптимизации 45 4.4. Программа для практики 45 4.4.1. Принцип работы программы 46 Глава 5. Подпрограммы 47 5.1. Исправляем ошибку 47 5.2. Подпрограммы 48 5.3. Программа для практики 51 5.4. Несколько слов об отладчике AFD 53 Глава 6. Работа со стеком 54 6.1. Стек 54 6.2. Программа для практики 61 6.2.1. Оператор nop 61 6.2.2. Хитрая программа 62 Глава 7. Операторы сравнения 64 7.1. Разбор программы из главы 6 64 7.2. Оператор сравнения 66 7.3. Понятия условного и безусловного переходов 69 7.4. Расширенные коды ASCII 69 7.5. Программа для практики 71 Глава 8. Учимся работать с файлами 74 8.1. Программа из прошлой главы 74 8.2. Основы работы с файлами 76 8.3. Программа для практики 82 Глава 9. Работа с файлами 84 9.1. Программа из прошлой главы 84 9.2. Программа для практики 87 ЧАСТЬ III. ФАЙЛОВАЯ ОБОЛОЧКА, ВИРУС, РЕЗИДЕНТ 91 Глава 10. Введение в вирусологию. Обработчик прерываний 93 10.1. Программа из прошлой главы 93 10.2. Вирус 97 10.2.1. Структура и принцип работы вируса 98 Что должен делать вирус? 98 Какой объем памяти занимает вирус? 98 Что может вирус? 98 Какой вирус мы будем изучать? 98 Что будет делать вирус? 98 Как оформляется вирус? 98 10.3. Резидент 99 10.3.1. Подробней о прерываниях 99 10.4. Первый обработчик прерывания 101 10.4.1. Новые операторы и функции прерываний 104 10.5. Работа с флагами процессора 104 10.5.1. Как проверить работу программы? 106 Глава 11. Управление видеоадаптером 109 11.1. Оболочка 109 11.2. Управление видеокартой 112 Глава 12. Повторная загрузка резидента 115 12.1. Резидент 115 12.2. Проверка на повторную загрузку резидента 115 12.3. Команды работы со строками 118 12.4. Использование xor и sub для быстрого обнуления регистров 125 12.5. Задание для освоения информации из данной главы 126 Глава 13. Поиск и считывание файлов: вирус 127 13.1. Теория 127 13.2. Практика 128 13.3. Команда пересылки данных movs 132 13.4. Передача управления программе, расположенной в другом сегменте 134 13.5. Поиск файлов 135 Глава 14. Вывод окна в центре экрана 137 14.1. Модели памяти 137 14.1.1. Почему мы пишем только файлы типа COM? 137 14.1.2. Что такое модель памяти и какие модели бывают? 137 14.2. Оболочка SuperShell 139 14.2.1. Управление курсором 139 14.2.2. Операторы работы со стеком процессора 80286+ 140 14.3. Процедура рисования рамки (окна) 142 14.3.1. Прямое отображение в видеобуфер 142 14.3.2. Процедура Draw_frame 143 Что такое линейный адрес и зачем он нужен? 144 14.4. Практика 145 14.5. Новые операторы 145 Глава 15. Обработка аппаратных прерываний 148 15.1. Теория 148 15.1.1. Сохранение предыдущего вектора прерывания 150 15.1.2. Способы передачи управления на прежний адрес прерывания 151 Первый способ 151 Второй способ 151 15.2. Инструкции ret и retf 152 15.2.1. Оператор ret 152 15.2.2. Оператор retf 153 15.3. Механизм работы аппаратных прерываний. Оператор iret 155 15.4. Практика 157 15.5. Логические команды процессора 159 15.5.1. Оператор or 159 15.5.2. Оператор and 160 15.5.3. Оператор xor 161 15.6. Аппаратные прерывания нашего резидента 162 15.6.1. Аппаратное прерывание 05h 162 15.6.2. Аппаратное прерывание 09h 162 15.6.3. Аппаратное прерывание 1Ch 163 15.7. Резюме 164 Глава 16. Принципы работы отладчиков 165 16.1. Как работает отладчик 165 16.1.1. Прерывание 03h 165 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 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. Обработка клавиш и
276
28.5. Обработка клавиш и 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
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
VI Оглавление VII Оглавление
Количество страниц: 366
Подробно и доходчиво в книге Ассемблер - это просто. Учимся программировать. 2-е изд. Калашников объясняются все основные вопросы программирования на ассемблере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, основы работы с сопроцессором, сегментация памяти в реальном масштабе времени, управление клавиатурой и последовательным портом, работа с дисками и многое другое. Описано, как разработать безобидный нерезидентный вирус и антивирус против этого вируса, как написать файловую оболочку (типа Norton Commander или FAR Manager) и как писать резидентные программы. Каждая глава состоит из объяснения новой темы, описания алгоритмов программ, многочисленных примеров и ответов на часто задаваемые вопросы. Во второе издание внесены исправления и добавлены новые примеры. Компакт-диск содержит исходные коды всех примеров, приведенных в книге, с подробными описаниями.
Оглавление книги
Ассемблер - это просто. Учимся программировать. 2-е изд. Калашников
Оглавление Предисловие 1 Несколько советов 2 Ответы на некоторые вопросы 3 ЧАСТЬ I. ЗНАКОМЬТЕСЬ: АССЕМБЛЕР 7 Глава 1. Первая программа 9 1.1. Шестнадцатеричная система счисления 9 1.2. Наша первая программа 12 1.3. Введение в прерывания 13 1.4. Резюме 16 Глава 2. Регистры процессора 17 2.1. Введение в регистры микропроцессоров 8086—80186 17 2.1.1. Регистры данных 17 2.1.2. Регистры-указатели 18 2.1.3. Сегментные регистры 18 2.2. Команды сложения и вычитания 19 2.2.1. Оператор add 19 2.2.2. Оператор sub 19 2.2.3. Оператор inc 20 2.2.4. Оператор dec 21 2.3. Программа для практики 21 Глава 3. Сегментация памяти в реальном режиме 23 3.1. Двоичная система счисления. Бит и байт 23 3.1.1. Как перевести двоичное число в десятичное 25 3.1.2. Как перевести десятичное число в двоичное 25 3.1.3. Как перевести шестнадцатеричное число в десятичное 26 3.2. Сегментация памяти в реальном режиме 26 3.2.1. Исследование программы в отладчике 28 3.3. Наше первое прерывание 32 3.3.1. Что такое ASCII? 32 3.4. Программа для практики 33 3.5. Подведем итоги 34 ЧАСТЬ II. УСЛОЖНЯЕМ ЗАДАЧИ 37 Глава 4. Создание циклов 39 4.1. Еще немного о сегментации памяти 39 4.1.2. Введение в адресацию 39 4.2. Создание циклов 42 4.2.1. Пример высокоуровневой оптимизации 43 4.3. Условный и безусловный переходы 44 4.3.1. Пример низкоуровневой оптимизации 45 4.4. Программа для практики 45 4.4.1. Принцип работы программы 46 Глава 5. Подпрограммы 47 5.1. Исправляем ошибку 47 5.2. Подпрограммы 48 5.3. Программа для практики 51 5.4. Несколько слов об отладчике AFD 53 Глава 6. Работа со стеком 54 6.1. Стек 54 6.2. Программа для практики 61 6.2.1. Оператор nop 61 6.2.2. Хитрая программа 62 Глава 7. Операторы сравнения 64 7.1. Разбор программы из главы 6 64 7.2. Оператор сравнения 66 7.3. Понятия условного и безусловного переходов 69 7.4. Расширенные коды ASCII 69 7.5. Программа для практики 71 Глава 8. Учимся работать с файлами 74 8.1. Программа из прошлой главы 74 8.2. Основы работы с файлами 76 8.3. Программа для практики 82 Глава 9. Работа с файлами 84 9.1. Программа из прошлой главы 84 9.2. Программа для практики 87 ЧАСТЬ III. ФАЙЛОВАЯ ОБОЛОЧКА, ВИРУС, РЕЗИДЕНТ 91 Глава 10. Введение в вирусологию. Обработчик прерываний 93 10.1. Программа из прошлой главы 93 10.2. Вирус 97 10.2.1. Структура и принцип работы вируса 98 Что должен делать вирус? 98 Какой объем памяти занимает вирус? 98 Что может вирус? 98 Какой вирус мы будем изучать? 98 Что будет делать вирус? 98 Как оформляется вирус? 98 10.3. Резидент 99 10.3.1. Подробней о прерываниях 99 10.4. Первый обработчик прерывания 101 10.4.1. Новые операторы и функции прерываний 104 10.5. Работа с флагами процессора 104 10.5.1. Как проверить работу программы? 106 Глава 11. Управление видеоадаптером 109 11.1. Оболочка 109 11.2. Управление видеокартой 112 Глава 12. Повторная загрузка резидента 115 12.1. Резидент 115 12.2. Проверка на повторную загрузку резидента 115 12.3. Команды работы со строками 118 12.4. Использование xor и sub для быстрого обнуления регистров 125 12.5. Задание для освоения информации из данной главы 126 Глава 13. Поиск и считывание файлов: вирус 127 13.1. Теория 127 13.2. Практика 128 13.3. Команда пересылки данных movs 132 13.4. Передача управления программе, расположенной в другом сегменте 134 13.5. Поиск файлов 135 Глава 14. Вывод окна в центре экрана 137 14.1. Модели памяти 137 14.1.1. Почему мы пишем только файлы типа COM? 137 14.1.2. Что такое модель памяти и какие модели бывают? 137 14.2. Оболочка SuperShell 139 14.2.1. Управление курсором 139 14.2.2. Операторы работы со стеком процессора 80286+ 140 14.3. Процедура рисования рамки (окна) 142 14.3.1. Прямое отображение в видеобуфер 142 14.3.2. Процедура Draw_frame 143 Что такое линейный адрес и зачем он нужен? 144 14.4. Практика 145 14.5. Новые операторы 145 Глава 15. Обработка аппаратных прерываний 148 15.1. Теория 148 15.1.1. Сохранение предыдущего вектора прерывания 150 15.1.2. Способы передачи управления на прежний адрес прерывания 151 Первый способ 151 Второй способ 151 15.2. Инструкции ret и retf 152 15.2.1. Оператор ret 152 15.2.2. Оператор retf 153 15.3. Механизм работы аппаратных прерываний. Оператор iret 155 15.4. Практика 157 15.5. Логические команды процессора 159 15.5.1. Оператор or 159 15.5.2. Оператор and 160 15.5.3. Оператор xor 161 15.6. Аппаратные прерывания нашего резидента 162 15.6.1. Аппаратное прерывание 05h 162 15.6.2. Аппаратное прерывание 09h 162 15.6.3. Аппаратное прерывание 1Ch 163 15.7. Резюме 164 Глава 16. Принципы работы отладчиков 165 16.1. Как работает отладчик 165 16.1.1. Прерывание 03h 165 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 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. Обработка клавиш
