Техника защиты компакт-дисков от копирования


Приложения, недопустимые операции и все, -все, -все…


Низкоуровневая работа с оборудованием, требует чрезвычайной собранности и внимания. Малейшая ошибка приводит к появлению "голубого экрана смерти" (BSOD — Blue Screen Of Death) или аварийному завершению одного или нескольких приложений. У разработчиков драйверов и саперов есть много общего –— ни та, ни другая профессия беспечности не прощает. Интерфейсы ASPI и SPTI, несмотря на свои "высококровные" оболочки (в просторечии именуемые "враперрами" от англ. wrapper — упаковщик[n2k85] обертка) настроены столь же агрессивно и "роняют" систему по поводу и без. Пройдет немало времени, прежде чем вы научитесь писать стабильный и неприхотливый код, а до той поры залогом вашего выживания будет умение бороться с последствиями критических ошибок и различноговсякого рода сбоев.

Различные операционные системы по разному реагируют на критические ошибки. Так, например Windows NT резервирует два региона своего адресного пространства для выявления некорректных указателей. Один находится на самом "дне" карты памяти и предназначен для отлавливания нулевых указателей. Другой расположен между "кучей" и областью памяти, закрепленной за операционной системой. Он контролирует выход за пределы пользовательской области памяти и, вопреки расхожему мнению, никак не связан в функцией WriteProcessMemory (см. техническую заметку ID: Q92764 в MSDN). Оба региона занимают по 64 Кбайт, и всякая попытка доступа к ним расценивается системой, как критическая ошибка. В Windows 9x имеется всего лишь один регион в 4 Кбайта регион, следящий за нулевыми указателями, поэтому по своим контролирующим способностям она значительно уступает Windows NT.

В Windows NT экран критической ошибки (см. рис. 3.12) содержит следующую информацию:

q      а)адрес машинной инструкции, возбудившей исключение;

q      б)словесное описание категории исключения (или его код, если категория исключения неизвестна);


q      в)параметры исключения ( адрес недействительной ячейки памяти, род операции и т. д.).



Рис.унок 3.21. test_2000 Сообщение о критической ошибке, выдаваемое операционной системой Windows 2000

Операционные системы семейства Windows 9x в этом отношении намного более информативны (см. рис. 3.2) и помимо категории исключения выводят содержимое регистров ЦП на момент сбоя, состояние стека и байты памяти по адресу CS:EIP (т. е. текущему адресу исполнения). Впрочем, наличие "Доктора Ватсона" (о нем –— далеениже) стирает различие между двумя системами, и потому можно говорить лишь об удобстве и эргономике Windows 9x, сразу предоставляющей весь минимум необходимых сведений, в то время как в Windows NT отчет об ошибке создается отдельной утилитой.



Рис.унок 3.3 2. Test_98 Сообщение о критической ошибке, выдаваемое операционной системой Windows 98

Если никакой из отладчиков в системе не установлен, то окно о критической ошибке имеет всего лишь одну кнопку –— кнопку "ОК", нажатие которой приводит к аварийному закрытию "политнекорректного" приложения. При желании окно критической ошибки можно оснастить кнопкой "Отмена" ("Cancel"), запускающей отладчик или иную утилиту анализа ситуации. Важно понять, что кнопка "Отмена" отнюдь не отменяет автоматическое закрытие приложения, но при некоторой сноровке вы можете устранить "пробоину" вручную, продолжив нормальную работу (см. врезку[Y86] ).

Запустите "Редактор реестра" (Regedit) и перейдите в раздел "HKLM\SOFTWARE\

Microsoft\Win­dows NT\CurrentVersion\AeDebug". Если такого раздела нет, то – создайте его самостоятельно. Строковой параметр "Debugger" задает путь к файлу отладчика со всеми необходимыми ключами; строковой параметр "Auto" указывает, должен ли отладчик запускаться автоматически (значение "1") или предлагать пользователю свободу выбора ("0").Наконец, двойное слово параметра "UserDebuggerHotKey" специфицирует скэн-код "горячей" клавиши для принудительного вызова отладчика.


Содержание  Назад  Вперед