Метод предопределенньш адресов
Переходим к методу определения оригинального адреса точки входа
в DOS, основанному на том, что эти адреса для разных версий и конфи-
гураций DOS имеют в общем случае различные значения, но число
их ограничено. А это значит, что их можно просто-напросто выбирать
из таблицы (причем не очень большой). Прием не новый, но незаслу-
женно забытый.
Имея программу, основанную на одном из ранее описанных способов
определения реального адреса обработчика DOS, загрузочные дискеты
с разными версиями DOS и немного терпения, можно получить при-
мерно вот такую информацию.
Оригинальный обработчик DOS версии 3.30 всегда имеет вид:
.Точка О
2Е CS:
891ЕВ800 MOV [ООВ8],ВХ
2Е CS:
8С06ВАОО MOV [OOBA],ES
СВ RETF
.Точка 1
2Е CS:
3A26FFOD СМР AH,[ODFF]
77DC JA 1443
80FC51 СМР АН,51
74А1 JZ 140D
80FC64 СМР АН,64
74ВА JZ 143A
;Точка 2
Оригинальные обработчики DOS версий 5.0-7.0 очень похожи.
В общем случае они состоят из следующих фрагментов:
Фрагмент 1 (если он присутствует) всегда располагается в нижних ад-
ресах памяти. Большинство алгоритмов трассировки заканчивают рабо-
ту, достигнув этой точки. Для DOS версий 5.0-6.22 этот фрагмент при-
сутствует, если в CONFIG.SYS есть строка DOS=HIGH (вне
зависимости от того, осуществляется ли запуск поддерживающего эту
опцию драйвера HIMEM.SYS). Если драйвера нет, то JMP FAR просто
указывает на фрагмент 2, размещающийся в нижних областях памяти.
Если строки DOS=HIGH нет, то фрагмент 1 вырожден (состоит из од-
ной команды внутрисегментного перехода), и обработчик состоит
из фрагмента 2.
;Точка О
90 МОР
90 NOP
E8CCOO CALL CheckA20
2E CS:
FF2E6A10J MP FAR NEXTDOS
Фрагмент 2 может располагаться как в верхних, так и в нижних адре-
сах памяти.
;Точка 1
NEXTDOS:
FA CLI
80FC6C СМР АН.6С
77D2 JA 40DO
80FC50 СМР АН.50
748Е JZ 40A9
;Точка 2
Для DOS 7.0 структура обработчика, в общем, такая же. Исключение -
фрагмент 1 присутствует всегда, вне зависимости от содержимого фай-
ла CONFIG.SYS. Теперь приведем конкретные значения адресов, полу-
ченные для разных случаев: