Название: Ассемблер для Windows
Автор: Пирогов В.Ю.
Издательство: БХВ-Петербург
Год: 2011
Страниц: 886
Формат: pdf + файлы
Размер: 28 mb
Качество: хорошее
Рассмотрены необходимые сведения для программирования Windows-приложений на ассемблерах MASM и TASM: разработка оконных и консольных приложений; создание динамических библиотек; многозадачное программирование; программирование в локальной сети, в том числе и с использованием сокетов; создание драйверов, работающих в режиме ядра; простые методы исследования программ и др.
В новом издании материал существенно переработан в соответствии с новыми возможностями ОС. Значительно шире рассмотрены вопросы управления файлами и API-программирования в Windows.
К книге прилагается компакт-диск со всеми примерами, которые приводятся или упоминаются в тексте.
Содержание:
Оглавление Введение 1
Что нового? 2
Соглашения 4
О Windows Vista 5
Структура изложения 5
Введение ко второму изданию книги "Ассемблер для Windows" 11
Введение к третьему изданию книги "Ассемблер для Windows" 15
ЧАСТЬ I. ОСНОВЫ ПРОГРАММИРОВАНИЯ В WINDOWS 17
Глава 1.1. Средства программирования в Windows
19
Первая программа на языке ассемблера и ее трансляция 19
Объектные модули 24
Директива INVOKE 27
Данные в объектном модуле 29
Упрощенный режим сегментации 31
О пакете MASM32 32
Обзор пакета MASM32 33
Трансляторы 35
Редактор QEDITOR 35
Дизассемблеры 37
Глава 1.2. Основы программирования в операционной системе Windows
42
Вызов функций API 44
Структура программы 46
Регистрация класса окон 46
Создание окна 47
Цикл обработки очереди сообщений 47
Процедура главного окна 48
Примеры простых программ для Windows 49
Еще о цикле обработки сообщений 56
Передача параметров через стек 58
Глава 1.3. Примеры простых программ на ассемблере
61
Принципы построения оконных приложений 61
Окно с кнопкой 63
Окно с полем редактирования 68
Окно со списком 76
Дочерние и собственные окна 85
Глава 1.4. Ассемблер MASM
95
Командная строка ML.EXE 95
Командная строка LINK.EXE 98
Включение в исполняемый файл отладочной информации 101
Получение консольных и GUI-приложений 107
Автоматическая компоновка 107
"Самотранслирующаяся" программа 107
Глава 1.5. О кодировании текстовой информации в операционной системе Windows
109
О кодировании текстовой информации 109
OEM и ANSI 110
Кодировка Unicode 111
ЧАСТЬ II. ПРОСТЫЕ ПРОГРАММЫ, КОНСОЛЬНЫЕ ПРИЛОЖЕНИЯ, ОБРАБОТКА ФАЙЛОВ 117
Глава 2.1. Вывод графики и текста в окно. Библиотека GDI
119
Вывод текста в окне 119
Выбор шрифта 135
Графические образы 141
Глава 2.2. Графика: GDI+, DirectX, OpenGL
154
Работаем с функциями GDI+ 154
Библиотека DirectX 165
Программируем на OpenGL 177
Глава 2.3. Консольные приложения
191
Создание консоли 194
Обработка событий от мыши и клавиатуры 200
Событие KEY_EVENT 201
Событие MOUSE_EVENT 202
Событие WINDOW_BUFFER_SIZE_EVENT 203
Таймер в консольном приложении 208
Глава 2.4. Понятие ресурса. Редакторы и трансляторы ресурсов
217
Язык описания ресурсов 217
Пиктограммы 218
Курсоры 219
Битовые изображения 220
Строки 220
Диалоговые окна 220
Меню 226
Акселераторы 232
Немодальные диалоговые окна 235
Глава 2.5. Примеры программ, использующих ресурсы
243
Динамическое меню 243
Горячие клавиши 254
Управление списками 263
Программирование в стиле Windows XP и Windows Vista 270
Глава 2.6. Управление файлами: начало
277
Характеристики файлов 277
Атрибут файла 278
Временные характеристики 279
Длина файла 280
Имя файла 281
Файловая система FAT32 282
Файловая система NTFS 285
Каталоги в NTFS 290
Сжатие файлов в NTFS 290
Точки повторной обработки 291
Поиск файлов 292
Приемы работы с двоичными файлами 310
Пример получения временных характеристик файла 324
Глава 2.7. Директивы и макросредства ассемблера
329
Метки 329
Строки 332
Структуры 332
Объединения 333
Удобный прием работы со структурами 333
Условное ассемблирование 334
Вызов процедур 335
Макроповторения 336
Макроопределения 337
Некоторые другие директивы транслятора ассемблера 339
Конструкции времени исполнения программы 340
Пример программы одинаково транслируемой как в MASM, так и в TASM 342
Глава 2.8. Еще об управлении файлами (CreateFile и другие функции)
344
Полное описание функции CreateFile для работы с файлами 344
Другие возможности функции CreateFile 349
Почтовый ящик или mailslot 350
Каналы передачи информации (pipes) 355
Дисковые устройства 356
Обзор некоторых других функций API, используемых для управления файлами 360
Асинхронный ввод/вывод 361
Запись в файл дополнительной информации 366
ЧАСТЬ III. СЛОЖНЫЕ ПРИМЕРЫ ПРОГРАММИРОВАНИЯ В WINDOWS 369
Глава 3.1. Таймер в оконных приложениях
371
Общие сведения 371
Простейший пример использования таймера 373
Взаимодействие таймеров 378
Всплывающие подсказки 384
Глава 3.2. Многозадачное программирование
397
Процессы и потоки 397
Потоки 412
Взаимодействие потоков 418
Семафоры 420
События 422
Критические секции 422
Взаимоисключения 433
Глава 3.3. Создание динамических библиотек
434
Общие понятия 434
Создание динамических библиотек 437
Неявное связывание 442
Использование общего адресного пространства 443
Совместное использование памяти разными процессами 452
Глава 3.4. Сетевое программирование
456
Сетевые устройства 456
Поиск сетевых устройств и подключение к ним 463
О сетевых протоколах TCP/IP 478
О модели OSI 478
О семействе TCP/IP 479
Об IP-адресации 481
Маскирование адресов 482
Физические адреса и адреса IP 483
О службе DNS 483
Автоматическое назначение IP-адресов 484
Маршрутизация и ее принципы 484
Управление сокетами 485
Пример простейшего клиента и сервера 490
Глава 3.5. Разрешение некоторых проблем программирования в Windows
504
Глава 3.6. Некоторые вопросы системного программирования в Windows
555
Страничная и сегментная адресация 555
Адресное пространство процесса 560
Управление памятью 563
Динамическая память 563
Виртуальная память 571
Фильтры (HOOKS) 572
Глава 3.7. Совместное использование ассемблера с языками высокого уровня
581
Согласование вызовов (исторический экскурс) 581
Согласование имен 582
Согласование параметров 583
Простой пример использования ассемблера с языками высокого уровня 584
Передача параметров через регистры 589
Вызовы API и ресурсы в ассемблерных модулях 591
Развернутый пример использования языков ассемблера и C 597
Встроенный ассемблер 605
Пример использования динамической библиотеки 607
Использование языка C из программ, написанных на языке ассемблера 610
Глава 3.8. Программирование сервисов
615
Основные понятия и функции управления 615
Структура сервисов 618
Пример сервиса 623
ЧАСТЬ IV. ОТЛАДКА, АНАЛИЗ КОДА ПРОГРАММ, ДРАЙВЕРЫ 639
Глава 4.1. Обзор инструментов для отладки и дизассемблирования
641
Утилиты фирмы Microsoft 641
EDITBIN.EXE 641
DUMPBIN.EXE 643
Дизассемблер W32Dasm 646
Отладчик OllyDbg 646
Другие инструменты 647
DUMPPE.EXE 647
Hiew.exe 647
DEWIN.EXE 650
IDA Pro 650
Глава 4.2. Отладчик OllyDbg
656
Начало работы с отладчиком 656
Окна отладчика 656
Отладочное выполнение 659
Точки останова 660
Обычные точки останова 660
Условные точки останова 661
Условные точки останова с записью в журнал 661
Точка останова на сообщения Windows 661
Точка останова на функции импорта 663
Точка останова на область памяти 663
Точка останова в окне Memory 663
Аппаратные точки останова 664
Другие возможности 664
Окно наблюдения 664
Поиск информации 665
Исправление исполняемого модуля 665
Глава 4.3. Описание работы с дизассемблером W32Dasm и отладчиком SoftICE
666
Отладчик W32Dasm 666
Начало работы 666
Передвижение по дизассемблированному тексту 668
Отображение данных 669
Вывод импортированных и экспортированных функций 670
Отображение ресурсов 670
Операции с текстом 671
Загрузка программ для отладки 671
Работа с динамическими библиотеками 673
Точки останова 673
Модификация кода, данных и регистров 673
Поиск нужного места в программе 675
Отладчик SoftICE 676
Основы работы с SoftICE 677
Запуск и интерфейс 677
Краткий справочник по SoftICE 688
Глава 4.4. Основы анализа кода программ
712
Переменные и константы 712
Управляющие структуры языка С 717
Условные конструкции 717
Вложенные условные конструкции 717
Оператор switch или оператор выбора 718
Циклы 719
Локальные переменные 720
Функции и процедуры 722
Оптимизация кода 723
Объектное программирование 727
Глава 4.5. Исправление исполняемых модулей
732
Простой пример исправления исполняемого модуля 732
Пример снятия защиты 736
Стадия 1. Попытка зарегистрироваться 736
Стадия 2. Избавляемся от надоедливого окна 738
Стадия 3. Доводим регистрацию до логического конца 740
Стадия 4. Неожиданная развязка 741
Глава 4.6. Структура и написание драйверов
743
О ядре и структуре памяти 743
Управление драйверами 745
Пример простейшего драйвера, работающего в режиме ядра 747
Драйверы режима ядра и устройства 753
ПРИЛОЖЕНИЯ 667
Приложение 1. Справочник API-функций и сообщений Windows 769
Приложение 2
. Справочник по командам и архитектуре микропроцессора Pentium 787
Регистры микропроцессора Pentium 787
Регистры общего назначения 787
Регистр флагов 788
Сегментные регистры 789
Управляющие регистры 789
Системные адресные регистры 791
Регистры отладки 791
Команды процессора 792
Команды арифметического сопроцессора 806
Расширение MMX 814
О новых инструкциях MMX 817
Приложение 3. Защищенный режим микропроцессора Pentium 819
Об уровнях привилегий 819
Селекторы 820
Дескриптор кода и данных 820
Другие дескрипторы 821
Сегмент TSS 822
О защите и уровнях привилегий 822
Привилегированные команды 822
Переключение задач 823
Страничное управление памятью 823
Приложение 4. Структура исполняемых модулей 825
Общая структура PE-модуля 826
Заголовок PE-модуля 828
Таблица секций 834
Секция экспорта (.edata) 837
Секция импорта (.idata) 839
Локальная область данных потоков 841
Секция ресурсов (.rdata) 842
Таблица настроек адресов 843
Отладочная информация (.debug$S, .debug$T) 845
Приложение 5. Файл kern.inc, используемый в главе 4.6 846
Приложение 6
. Пример консольного приложения с полной обработкой событий 855
Приложение 7. Описание компакт-диска 865
Список литературы 867
Предметный указатель 869
X Оглавление XI Оглавление
Что нового? 2
Соглашения 4
О Windows Vista 5
Структура изложения 5
Введение ко второму изданию книги "Ассемблер для Windows" 11
Введение к третьему изданию книги "Ассемблер для Windows" 15
ЧАСТЬ I. ОСНОВЫ ПРОГРАММИРОВАНИЯ В WINDOWS 17
Глава 1.1. Средства программирования в Windows
19
Первая программа на языке ассемблера и ее трансляция 19
Объектные модули 24
Директива INVOKE 27
Данные в объектном модуле 29
Упрощенный режим сегментации 31
О пакете MASM32 32
Обзор пакета MASM32 33
Трансляторы 35
Редактор QEDITOR 35
Дизассемблеры 37
Глава 1.2. Основы программирования в операционной системе Windows
42
Вызов функций API 44
Структура программы 46
Регистрация класса окон 46
Создание окна 47
Цикл обработки очереди сообщений 47
Процедура главного окна 48
Примеры простых программ для Windows 49
Еще о цикле обработки сообщений 56
Передача параметров через стек 58
Глава 1.3. Примеры простых программ на ассемблере
61
Принципы построения оконных приложений 61
Окно с кнопкой 63
Окно с полем редактирования 68
Окно со списком 76
Дочерние и собственные окна 85
Глава 1.4. Ассемблер MASM
95
Командная строка ML.EXE 95
Командная строка LINK.EXE 98
Включение в исполняемый файл отладочной информации 101
Получение консольных и GUI-приложений 107
Автоматическая компоновка 107
"Самотранслирующаяся" программа 107
Глава 1.5. О кодировании текстовой информации в операционной системе Windows
109
О кодировании текстовой информации 109
OEM и ANSI 110
Кодировка Unicode 111
ЧАСТЬ II. ПРОСТЫЕ ПРОГРАММЫ, КОНСОЛЬНЫЕ ПРИЛОЖЕНИЯ, ОБРАБОТКА ФАЙЛОВ 117
Глава 2.1. Вывод графики и текста в окно. Библиотека GDI
119
Вывод текста в окне 119
Выбор шрифта 135
Графические образы 141
Глава 2.2. Графика: GDI+, DirectX, OpenGL
154
Работаем с функциями GDI+ 154
Библиотека DirectX 165
Программируем на OpenGL 177
Глава 2.3. Консольные приложения
191
Создание консоли 194
Обработка событий от мыши и клавиатуры 200
Событие KEY_EVENT 201
Событие MOUSE_EVENT 202
Событие WINDOW_BUFFER_SIZE_EVENT 203
Таймер в консольном приложении 208
Глава 2.4. Понятие ресурса. Редакторы и трансляторы ресурсов
217
Язык описания ресурсов 217
Пиктограммы 218
Курсоры 219
Битовые изображения 220
Строки 220
Диалоговые окна 220
Меню 226
Акселераторы 232
Немодальные диалоговые окна 235
Глава 2.5. Примеры программ, использующих ресурсы
243
Динамическое меню 243
Горячие клавиши 254
Управление списками 263
Программирование в стиле Windows XP и Windows Vista 270
Глава 2.6. Управление файлами: начало
277
Характеристики файлов 277
Атрибут файла 278
Временные характеристики 279
Длина файла 280
Имя файла 281
Файловая система FAT32 282
Файловая система NTFS 285
Каталоги в NTFS 290
Сжатие файлов в NTFS 290
Точки повторной обработки 291
Поиск файлов 292
Приемы работы с двоичными файлами 310
Пример получения временных характеристик файла 324
Глава 2.7. Директивы и макросредства ассемблера
329
Метки 329
Строки 332
Структуры 332
Объединения 333
Удобный прием работы со структурами 333
Условное ассемблирование 334
Вызов процедур 335
Макроповторения 336
Макроопределения 337
Некоторые другие директивы транслятора ассемблера 339
Конструкции времени исполнения программы 340
Пример программы одинаково транслируемой как в MASM, так и в TASM 342
Глава 2.8. Еще об управлении файлами (CreateFile и другие функции)
344
Полное описание функции CreateFile для работы с файлами 344
Другие возможности функции CreateFile 349
Почтовый ящик или mailslot 350
Каналы передачи информации (pipes) 355
Дисковые устройства 356
Обзор некоторых других функций API, используемых для управления файлами 360
Асинхронный ввод/вывод 361
Запись в файл дополнительной информации 366
ЧАСТЬ III. СЛОЖНЫЕ ПРИМЕРЫ ПРОГРАММИРОВАНИЯ В WINDOWS 369
Глава 3.1. Таймер в оконных приложениях
371
Общие сведения 371
Простейший пример использования таймера 373
Взаимодействие таймеров 378
Всплывающие подсказки 384
Глава 3.2. Многозадачное программирование
397
Процессы и потоки 397
Потоки 412
Взаимодействие потоков 418
Семафоры 420
События 422
Критические секции 422
Взаимоисключения 433
Глава 3.3. Создание динамических библиотек
434
Общие понятия 434
Создание динамических библиотек 437
Неявное связывание 442
Использование общего адресного пространства 443
Совместное использование памяти разными процессами 452
Глава 3.4. Сетевое программирование
456
Сетевые устройства 456
Поиск сетевых устройств и подключение к ним 463
О сетевых протоколах TCP/IP 478
О модели OSI 478
О семействе TCP/IP 479
Об IP-адресации 481
Маскирование адресов 482
Физические адреса и адреса IP 483
О службе DNS 483
Автоматическое назначение IP-адресов 484
Маршрутизация и ее принципы 484
Управление сокетами 485
Пример простейшего клиента и сервера 490
Глава 3.5. Разрешение некоторых проблем программирования в Windows
504
Глава 3.6. Некоторые вопросы системного программирования в Windows
555
Страничная и сегментная адресация 555
Адресное пространство процесса 560
Управление памятью 563
Динамическая память 563
Виртуальная память 571
Фильтры (HOOKS) 572
Глава 3.7. Совместное использование ассемблера с языками высокого уровня
581
Согласование вызовов (исторический экскурс) 581
Согласование имен 582
Согласование параметров 583
Простой пример использования ассемблера с языками высокого уровня 584
Передача параметров через регистры 589
Вызовы API и ресурсы в ассемблерных модулях 591
Развернутый пример использования языков ассемблера и C 597
Встроенный ассемблер 605
Пример использования динамической библиотеки 607
Использование языка C из программ, написанных на языке ассемблера 610
Глава 3.8. Программирование сервисов
615
Основные понятия и функции управления 615
Структура сервисов 618
Пример сервиса 623
ЧАСТЬ IV. ОТЛАДКА, АНАЛИЗ КОДА ПРОГРАММ, ДРАЙВЕРЫ 639
Глава 4.1. Обзор инструментов для отладки и дизассемблирования
641
Утилиты фирмы Microsoft 641
EDITBIN.EXE 641
DUMPBIN.EXE 643
Дизассемблер W32Dasm 646
Отладчик OllyDbg 646
Другие инструменты 647
DUMPPE.EXE 647
Hiew.exe 647
DEWIN.EXE 650
IDA Pro 650
Глава 4.2. Отладчик OllyDbg
656
Начало работы с отладчиком 656
Окна отладчика 656
Отладочное выполнение 659
Точки останова 660
Обычные точки останова 660
Условные точки останова 661
Условные точки останова с записью в журнал 661
Точка останова на сообщения Windows 661
Точка останова на функции импорта 663
Точка останова на область памяти 663
Точка останова в окне Memory 663
Аппаратные точки останова 664
Другие возможности 664
Окно наблюдения 664
Поиск информации 665
Исправление исполняемого модуля 665
Глава 4.3. Описание работы с дизассемблером W32Dasm и отладчиком SoftICE
666
Отладчик W32Dasm 666
Начало работы 666
Передвижение по дизассемблированному тексту 668
Отображение данных 669
Вывод импортированных и экспортированных функций 670
Отображение ресурсов 670
Операции с текстом 671
Загрузка программ для отладки 671
Работа с динамическими библиотеками 673
Точки останова 673
Модификация кода, данных и регистров 673
Поиск нужного места в программе 675
Отладчик SoftICE 676
Основы работы с SoftICE 677
Запуск и интерфейс 677
Краткий справочник по SoftICE 688
Глава 4.4. Основы анализа кода программ
712
Переменные и константы 712
Управляющие структуры языка С 717
Условные конструкции 717
Вложенные условные конструкции 717
Оператор switch или оператор выбора 718
Циклы 719
Локальные переменные 720
Функции и процедуры 722
Оптимизация кода 723
Объектное программирование 727
Глава 4.5. Исправление исполняемых модулей
732
Простой пример исправления исполняемого модуля 732
Пример снятия защиты 736
Стадия 1. Попытка зарегистрироваться 736
Стадия 2. Избавляемся от надоедливого окна 738
Стадия 3. Доводим регистрацию до логического конца 740
Стадия 4. Неожиданная развязка 741
Глава 4.6. Структура и написание драйверов
743
О ядре и структуре памяти 743
Управление драйверами 745
Пример простейшего драйвера, работающего в режиме ядра 747
Драйверы режима ядра и устройства 753
ПРИЛОЖЕНИЯ 667
Приложение 1. Справочник API-функций и сообщений Windows 769
Приложение 2
. Справочник по командам и архитектуре микропроцессора Pentium 787
Регистры микропроцессора Pentium 787
Регистры общего назначения 787
Регистр флагов 788
Сегментные регистры 789
Управляющие регистры 789
Системные адресные регистры 791
Регистры отладки 791
Команды процессора 792
Команды арифметического сопроцессора 806
Расширение MMX 814
О новых инструкциях MMX 817
Приложение 3. Защищенный режим микропроцессора Pentium 819
Об уровнях привилегий 819
Селекторы 820
Дескриптор кода и данных 820
Другие дескрипторы 821
Сегмент TSS 822
О защите и уровнях привилегий 822
Привилегированные команды 822
Переключение задач 823
Страничное управление памятью 823
Приложение 4. Структура исполняемых модулей 825
Общая структура PE-модуля 826
Заголовок PE-модуля 828
Таблица секций 834
Секция экспорта (.edata) 837
Секция импорта (.idata) 839
Локальная область данных потоков 841
Секция ресурсов (.rdata) 842
Таблица настроек адресов 843
Отладочная информация (.debug$S, .debug$T) 845
Приложение 5. Файл kern.inc, используемый в главе 4.6 846
Приложение 6
. Пример консольного приложения с полной обработкой событий 855
Приложение 7. Описание компакт-диска 865
Список литературы 867
Предметный указатель 869
X Оглавление XI Оглавление