Введение
ВведениеПредисловие
Основы битного программирования в Windows
Часть I Основы битного программирования в WindowsВводная информация
Схема трансляции ассемблерного
"Ничего не делающая" программа
Пример использование директивы INCLUDE
Перейдем теперь к вопросу о подсоединении других объектных модулей
Модуль PROG ASM процедура которого PROC будет вызываться из основного модуля
Модуль PROG ASM с вызовам процедуры из модуля PROG ASM
Обратимся теперь к директиве INVOKE
Пример использования оператора INVOKE
Вопрос об использовании данных
Модуль содержащий переменную ALT которая используется в другом модуле (PROG ASM)
Модуль использующий переменную ALT определенную в другом модуле (PROG ASM)
Объединение модулей
Пример программы использующей упрощенную сегментацию
Краткий обзор ряда других программ
Редакторы
Отладчики
Дизассемблеры
Пример дизассемблированш программы
Компиляторы ресурсов
Редакторы ресурсов
Глава Основы программирования в операционной системе Windows
Int MessageBox
Регистрация класса окон
Создание окна
Цикл обработки очереди сообщений
Процедура главного окна
"Скелет" оконной
Приступим теперь к разбору конкретных примеров
Простой пример программы для Windows (MASM)
После разбора программы
Простой пример программы для Windows (TASM)
Вопрос о передачи параметров через стек
Схема передачи параметров в процедуру
Глава Примеры простых программ на языке ассемблера
Свойства конкретного окна
Приступаем к разбору следующего примера
Второй пример касается использования окна редактирования
Пример окна со строкой редактирования
Работа программы со строкой редактирования (Программа на Рисунок ) IV
Экскурс в битное программирование
Пример битного приложения
Глава Ассемблеры MASM и TASM
Программа ML EXE
Программа LINK EXE( bit)
Программа TLINK EXE
Включение в исполняемый файл отладочной информации
Получение консольных и GUI приложений
Окно TD EXE с отлаживаемой программой
Автоматическая компоновка
Примеры простейших программ
Часть II Более подробное описание программирования в среде WindowsГлава Примеры простейших программ
Если вы только начинаете программировать под Windows
Пример простейшей программы с текстом
Текстовая строка все время в середине окна
Рассмотрим теперь вопрос о том как выводить текстовую информацию
Фрагмент программы выводящей текст с заданным шрифтом (см Рисунок )
Процедура копирования одной
Этот раздел главы посвящается графике
Простая программа для демонстрации графики
Результат работы программы на Рисунок
Рассмотрим несколько простых консольных функций
Данный раздел будет поевящен обработке команд мыши и клавиатуры
Таймеры в консольном приложении
Глава Понятие ресурса Редакторы и трансляторы ресурсов
В данном разделе мы займемся изучением языка ресурсов
Меню
Акселераторы
Трансляция при помощи пакета TASM
Глава Примеры программ использующих ресурсы
Пример простейших манипуляций с меню
Пример манипуляции с меню
Итак продолжим рассматривать ресурсы
Пример использования горячих клавиш с диалоговым окном
Данный раздел посвящен диалоговому окну с двумя списками
Пример программы с двумя списками
Глава Управление файлами
Битная FAT Характеристики файлов
Атрибут файла
Файл имеет три временные характеристики
Длина файла
Кроме указанных характеристик
Поиск файлов
Пример простой программы которая осуществляет поиск файлов и выводит их название на экран
Пример программы которая осуществляет рекурсивный поиск по дереву каталогов
Трансляция программы в TASM
Приемы работы с двоичными файлами*
Вывод на консоль содержимого текстового файла Первый способ
Вывод на консоль содержимого текстового фаша Второй способ
Пример обработки текстового файла
Глава Макросредства ассемблера и программирование в Windows
Большая часть данной главы будет носить справочный характер
Метки
Структура
Условное ассемблирование
Вызов процедур
Макроповторения
Макроопределения
Некоторые другие директивы транслятора ассемблера
Конструкции времени исполнения программы
Сейчас мы рассмотрим вопрос о написании программ
Пример использования условного ассемблирования для написания совместимой программы
Структура исполняемых модулей
Отладка анализ кода программ драйверыСтруктура исполняемых модулей
Структура ЕХЕпрограммы для MS DOS
Общая структура РЕмодуля
Общая структура РЕзаголовка
Фрагмент РЕзаголовка
Описание заголовка РЕ
Секция экспорта ( edata) Общая структура
Вызов импортируемой функции
Таблица директория импорта
Формат входа в каталог импорта
Локальная область данных цепочек (потоков)
Таблица разделов потоков
Секция ресурсов ( rdata)
Каталог ресурсов (Resource Directory Table)
Вход в таблицу ресурсов (Resource Entry Item)
Таблица настроек адресов
Структура элемента массива настроек
Отладочная информация ( debug$S debug$T)
Отладочный каталог
Глава Обзор отладчиков и дизассемблеров
EDITBIN EXE
DUMPBIN EXE
Часть дизассемблированиого
DUMPPE EXE
HIEW EXE
Внешний вид программы HIEW EXE
Дизассемблированный код программы на Рисунок
DEWIN EXE
IDA PRO
Пример дизассемблирования программы с помощью самого мощного дизассемблера IDA PRO (под Windows)
Часть программы содержащей данные дизассемблированная при помощи IDA PRO
Пример командного файла IDA PRO
Отладчик фирмы Borland
Запуск отлаживаемого приложения
Выполнить программу до строки где находится курсор
Выполнить единичную команду
Выполнение команды с переходом через процедуру
Выполнить процедуру
Выполнение с задержкой
Текст программы можно увидеть на экране
Если отладочную информацию в исполняемом модуле
Окно CPU отладчика Turbo Debugger
Окно слежения за переменными
Окно стека
Окно точек останова
Окно регистрации (Log)
Окно переменных
Окно файлов
Окно отображения памяти
Окно сопроцессора
Окно истории выполнения (Execution History)
Окно иерархии (Hierarchy)
Пример окна Turbo Debugger отображающего иерархию классов
Окно потоков
Окно сообщений
Окно буфера обмена
Поговорим теперь об отладке программ
Программа расположенная на Рисунок в окне отладчика
Пример простой консольной программы
Основной целью отладчика Turbo Debugger является отладка программы
Глава Описание работы с дизассемблером WDasm и отладчиком ICE
Программа WDasm
Начало работы
Внешний вид программы WDasm
Фрагмент дизассемблированного текста Передвижение по дизассемблированному тексту
Данные
Окно ссылок на строки
Импортированные и экспортированные функции
Ресурсы
Операции с текстом
Загрузка программ для отладки
Фрагмент списка импортированных модулей и функций
Первое информационное окно отладчика
Работа с динамическими библиотеками
Точки останова
Второе управляющее окно отладчика
Модификация кода данных и регистров
Окно модификации отлаживаемого кода
Поиск нужного места в программе
Окно модификации регистров и ячеек памяти Дополнительные возможности для работы с API
Отладчик SoftIce
Начальная установка
Загрузка программы для отладки
Вид загрузчика SoftIce (LOADER EXE) Окно настройки запуска модуля в отладчике Softice
Обзор команд отладчика
Основы анализа кода программ
Переменные и константы
Функция main консольного приложения
Окончательный вариант программы
Классические структуры языка Си
Условные конструкции
Оператор switch или оператор выбора
Циклы
Локальные переменные
Пример задания двух локальных массивов Взят из отладчика IDA PRO
Как выглядит фрагмент программы представленный на Рисунок в окне дизассемблера WDasm
Функции и процедуры
Оптимизация кода
Вот как выглядит ассемблерный код
Дизассемблированный текст программы (Рисунок ) Транслятор Borland C++
Скорость или объем
Оптимизация условных переходов
Оптимизация вызовов процедур
Объектное программирование
Программа на Си++ использующая объекты
Дизассемблированный код функции main с Рисунок Дизассемблер IDA PRO
Дизассемблированный код функции
Исправление исполняемых модулей
Allscreen программа
Окно появляющееся при запуске
Сообщение об истечении времени работы программы
Фрагмент кода осуществляющего в частности задержку
Фрагмент кода проверки количества запусков
Поиск процедуры окна
Будем искать функцию последнего
Начало функции окна
Структура и написание драйверов VXD
VxDдрайвер
Начнем с содержимого DEFфайла
Файл VXD DEF используемый для
Содержимое файла VXD MAP
Динамические виртуальные драйверы
Программа загружающая использующая и выгружающая динамический драйвер
Пример динамического драйвера
Структура содержащая значения
Примеры программ использующих таймер
Часть III Более сложные примеры программирования в WindowsГлава Примеры программ использующих таймер
Первый пример
Пример реализации простейшего таймера
Следующая программа несколько сложнее предыдущей
Пример использования двух таймеров
В данном разделе мы рассмотрим весьма интересный вопрос о всплывающих подсказках
Пример диалогового окна с всплывающими подсказками
Диалоговое окно с всплывающими подсказками
Глава Многозадачное программирование
Под процессом будем понимать объект
Пример создания процесса
Теперь пришла пора вплотную заняться потоками
Пример создания потока
Поговорим теперь о многопотоковой программе
Семафоры
События
Критические секции
Пример синхронизации двух потоков посредством критической секции
Взаимоисключения
Использование динамических библиотек
Иллюстрация понятия связывания
Перейдем теперь к разбору программных примеров динамических библиотек
Простейшая DLLбиблиотека
Вызов динамической библиотеки Явное связывание
Мы здесь рассмотрим только вызывающую программу
Вызов динамической библиотеки Неявное связывание
Текст динамической библиотеки и программы
Основной модуль и динамическая библиотека Передача параметров
З З Пример загрузки ресурса из динамической библиотеки
Рассмотрим теперь вопрос о том как используют динамическую библиотеку
Пример использования разделяемой памяти в динамической библиотеке
Глава Взаимодействие с ресурсами локальной сети
В прикладном программировании часто возникает вопрос определения сетевых устройств
Простой пример определения типа устройств
Результат работы программы
Программа осуществляющая соединение с сетевым ресурсам
Рекурсивный поиск сетевых ресурсов в локальной сети
Что осталось за бортом?
Глава Разрешение некоторых проблем программирования в Windows
В Как сделать так чтобы при минимизации окна значок его помещался бы на системную панель?
Демонстрация процедуры помещения иконки на системную панель
В Есть ли дополнительные средства упрощающие файловую обработку?
В Можно ли контролировать ввод информации в окне редактирования?
Пример использования подклассов
В Возможны ли какиелибо способы взаимодействия и обмен информацией между запущенными приложениями?
Пример взаимодействия с консольным процессом через PIPE
В Можно ли не допустить многократный запуск одного и того же приложения?
В Имеет ли операционная система
В Как отправить данные на печатающее устройство?
В Может ли приложение узнать какие программы в настоящее время запущены?
Программа поиска процессов
Пример работы программы на Рисунок
Глава Некоторые вопросы системного программирования в Windows
О страничной и сегментной адресации
Схема преобразования логического
Преобразование линейного адреса
Адресное пространство процесса
Управление памятью
Пример программы с выделением динамической памяти
Фильтры (HOOKS)
Простой пример построения глобального фильтра
Глава Использование ассемблера с языками высокого уровня
Согласование вызовов
Согласование имен
Согласование параметров
В данном разделе рассматривается простой модуль на языке ассемблера
) Borland C++
Пример использования процедуры из внешнего модуля Используется транслятор BORLAND C++
Visual C++
Модуль на языке ассемблера для компоновки с помощью пакета Visual C++
) Delphi
Пример подключения объектного модуля к программе на Delphi
В этом разделе используется другой тип вызова быстрый
Пример регистрового соглашения вызова процедуры
Вызываемая ассемблерная процедура
Консольная программа на C++
Пример использования в ассемблерном модуле APIфункций и ресурсов
Здесь рассматривается пример простейшего калькулятора
Симодуль для программы простейшего
Пример работы программыкалькулятора (Рисунок ) V
Пример использования директивы
Пример использования директивы
Динамическая библиотека созданная на Delphi
Пример динамической библиотеки написанной на Delphi
Пример программы на языке
Приложения
Приложение Справочник APIфункций и сообщений WindowsТаблица Функции API
Таблица Сообщение операционной системы Windows
Приложение Справочник по командам и архитектуре Pentium
Регистры общего назначения
Регистр флагов
Сегментные регистры
Регистр CR
Системные адресные регистры
Регистры отладки
Команды пересылки данных
Команды вводавывода
Инструкции работы со стеком
Инструкции целочисленной арифметики
Логические операции
Сдвиговые операции
Строковые операции
Команды управления флагами
Команды передачи управления
Команды поддержки языков высокого уровня
Команды прерываний
Команды синхронизации процессора
Команды обработки цепочки бит
Команды управления защитой
Команды обмена с управляющими регистрами
Команды идентификации и управления архитектурой
Команды управления кэшированием
Команды арифметического сопроцессора
Команды передачи данных
Команды сравнения данных
Арифметические команды
Трансцендентные функции
Команды управления сопроцессором
Расширение MMX
Команды MMX расширения
Приложение Защищенный режим микропроцессора Pentium
Дескриптор кода и данных
Другие дескрипторы
Переключение задач
Четырехуровневая система привилегий
Страничное управление памятью