"Hanger" - Информация защищённого режима
НЕ ДЛЯ КОММЕРЧЕСКОГО ИСПОЛЬЗОВАНИЯЭто свободно распространяемая программа. Распространяется "как есть". Автор не обеспечивает Вам никакой гарантии на эту программу. Автор не несёт никакой ответственности за повреждения (ущерб), к которым может привести использование этой программы. Вы используете эту программу на свой страх и риск. Вы можете делать сколько угодно копий этой программы и передавать их своим друзьям, знакомым и незнакомым людям, не взимая с них никакой платы за копию программы.
Все упомянутые в этом документе торговые марки использованы только для идентификации и могут быть товарными знаками их соответствующих правообладателей.
ОБЩЕЕ ОПИСАНИЕ И СИСТЕМНЫЕ ТРЕБОВАНИЯ
Вашему вниманию предлагается программа "Hanger", которая выдаёт информацию о защищённом режиме и позволяет её изменять. Программа была разработана в IDE Borland C++ 5.01. Основной язык - C, некоторые процедуры написаны на Ассемблере. Программа требует Windows 3.1/95/98 на процессоре выше 386 и немножко оперативной памяти. Эта 16-битная программа использует только системные модули: KERNEL, USER, GDI и CTL3DV2. Программа НЕ БУДЕТ РАБОТАТЬ в Windows NT и Windows-эмуляторе OS/2, т.к. в этих операционных системах нет той "дырки", на которой основана работа моей программы.ОПИСАНИЕ ПРИМЕНЕНИЯ
Программа может быть использована при отладке программ, для изучения архитектуры микропроцессоров Intel и просто так - без цели.Программа выполняет следующие функции:
- просмотр системных регистров процессора (CR0,CR3,DR0-DR3,DR6,DR7,GDTR,IDTR,LDTR,TR,EFLAGS),
- просмотр и изменение дескрипторных таблиц (GDT,IDT,LDT),
- просмотр и изменение сегментов состояния задач (TSS),
- просмотр и изменение сегментов данных и кода, описанных в дескрипторных таблицах.
ПРИНЦИП РАБОТЫ И ФУНКЦИОНАЛЬНЫЕ ОГРАНИЧЕНИЯ
Инструкции процессора SGDT и SIDT не являются привилегированными. Выполнив их, можно узнать линейные базовые адреса и пределы этих дескрипторных таблиц. Затем с помощью сервиса DPMI создаются дескрипторы сегментов с этими адресами и пределами, доступные с низшего уровня привилегий (кольцо 3). Особенностью Microsoft Windows (но не NT!!!) является то, что дескрипторные таблицы расположены на страницах памяти, доступных с уровня пользователя (т.е. защита на уровне страниц для дескрипторных таблиц не используется). Таким образом организуется доступ к GDT и IDT. После этого программа, в случае необходимости, самостоятельно создаёт шлюзы вызова и переходит в кольцо 0 для выполнения некоторых процедур.Программа самостоятельно находит все LDT и TSS и предоставляет возможность интерпретации их содержимого в удобном для пользователя виде. Программа предполагает, что LDT и TSS могут находиться только в GDT, поэтому дескрипторы этих объектов в LDT и IDT игнорируются (они там не могут появиться и не появятся, если Вы в процессе экспериментов с программой их там не создадите). Программа может работать только в системе, в которой GDT содержит не более 500 дескрипторов LDT и не более 500 дескрипторов TSS. Если это правило не выполняется, то поведение программы непредсказуемо.
Программа выводит содержимое только основных регистров, которые гарантированно присутствуют в любом процессоре выше 386, т.к. процедура анализа поколения процессора и его возможностей в этой версии не реализована. Программа не позволяет Вам изменять содержимое системных регистров процессора. Дело в том, что очень сложно придумать такие новые значения регистров, чтобы машина не "повесилась". Хотя программа называется "Hanger", всё же "повесить" машину не является её основной целью (Windows сделает это без Вашего участия).
В этой версии программы нет своих обработчиков исключений процессора, поэтому чуть что не так - вылетает либо программа, либо Windows. А именно: при попытке обратиться к неприсутствующим страницам памяти, Windows иногда отказывается подгружать их с диска и прерывает программу по страничному нарушению. Хотя в программе реализована возможность доступа к памяти через процедуру в нулевом кольце привилегий, прочитать память по старшим линейным адресам пока не удаётся (там находится блок страниц с уровнем привилегий супервизора).
Эта версия программы не работает с элементами уровня страничного преобразования.
КАК РАБОТАТЬ С ПРОГРАММОЙ
Прежде всего - о ключах запуска. Программа имеет две опции настроек:- "-c" : отключить чтение регистров защищённого режима (в нормальном режиме при запуске программы через шлюз вызывается привилегированная процедура, читающая регистры IDTR, LDTR, TR, EFLAGS, CR0, CR3, DR0-DR3, DR6, DR7)
- "-p" : включить привилегированный доступ (т.е. сразу же после получения доступа к GDT все обращения к памяти будут происходить с помощью привилегированной процедуры).

Если Вы решитесь что-нибудь изменить, то для этого надо будет всего лишь два раза щёлкнуть мышкой по изменяемому элементу. Для дескрипторной таблицы изменяемым элементом является дескриптор (64-битное число). Для TSS - поле соответствующего регистра (16/32-битное число). Для дампа памяти - строка из шестнадцати 8-битных чисел. Все числа вводятся в шестнадцатеричном виде. Встретив неверный знак, программа его игнорирует, не выдавая никаких предупреждений.
Хотя программа не предназначена для работы в DOS, тем не менее, вместо стандартной заглушки "This program can not run in DOS mode" выполняется коротенькая процедурка, выводящая на экран содержание GDT. Чтобы она сработала, надо, во-первых, чтобы процессор находился в защищённом режиме (драйвер расширенной памяти (EMM, QEMM, ...) переводит процессор в защищённый режим, так что чаще всего это условие выполняется), вторым условием является наличие DPMI-host версии не ниже 0.9. DPMI-host в памяти сам по себе не появляется, его надо загрузить (например Quarterdeck DPMI host, Borland DOS extender, ...)
Горячие клавиши:
- CTRL+R :обновить содержимое открытых окон;
- CTRL+C :показать/скрыть окошко регистров процессора;
- CTRL+G :показать/скрыть окошко GDT;
- CTRL+T :показать/скрыть окошко IDT;
- CTRL+S :показать сегмент, соответствующий выделенному дескриптору;
- ALT+M :просмотр структуры в виде дампа памяти;
- ALT+D :просмотр структуры в виде дескрипторной таблицы;
- ALT+T :просмотр структуры в виде сегмента состояния задачи.
СКАЧАТЬ: hanger.zip (19,7 Kбайт)
Последние изменения 08.03.1999.