Имея программу, основанную на одном из ранее описанных способов определения реального адреса обработчика DOS, загрузочные дискеты с разными версиями DOS и немного терпения, можно получить примерно вот такую информацию.
Оригинальный обработчик DOS версии 3.30 всегда имеет вид:
;Точка 0
2E CS:
891EB800 MOV [00B8],BX
2E CS:
8C06BA00 MOV [00BA],ES
CB RETF
...
80FC64 CMP AH,64
74BA 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.
;Точка 0
90 NOP
90 NOP
E8CC00 CALL CheckA20
2E CS:
FF2E6A10 J MP FAR NEXTDOS
Фрагмент 2 может располагаться как в верхних, так и в нижних адресах памяти.
;Точка 1
NEXTDOS:
FA CLI
80FC6C CMP AH,6C
77D2 JA 40D0
...
80FC50 CMP AH,50
748E JZ 40A9
;Точка 2
Для DOS 7.0 структура обработчика, в общем, такая же. Исключение – фрагмент 1 присутствует всегда, вне зависимости от содержимого файла CONFIG.SYS. Теперь приведем конкретные значения адресов, полученные для разных случаев:
DOS 7.0 (русская версия)
Точка 0 00C9:0FB2 9090
Точка 1 FF03:41E7 80FA
Точка 2 FF03:420A 1E06
Точка 2А FF03:5333 2ACD
DOS 6.20
device=himem.sys
dos=high
Точка 0 0123:109E 9090
Точка 1 FDC8:40F8 80FA
Точка 2 FDC8:411B 1E06
Точка 2A FDC8:41D1 2ACD
DOS 6.20
dos=high
Точка 0 0123:109E 03EB
Точка 1 03AC:40F8 80FA
Точка 2 03AC:411B 1E06
Точка 2A 03AC:41D1 2ACD
DOS 6.20
Точка 1 002A:40F8 80FA
Точка 2 002A:411B 1E06
Точка 2A 002A:41D1 2ACD
DOS 5.0
device=himem.sys
dos=high
Точка 0 0123:109E 9090
Точка 1 FDC8:40EB 80FA
Точка 2 FDC8:410E 1E06
Точка 2A FDC8:41C4 2ACD
DOS 5.0
dos=high
Точка 0 0123:109E 03EB
Точка 1 03AC:40F8 80FA
Точка 2 03AC:411B 1E06
Точка 2A 03AC:41D1 2ACD
DOS 5.0
Точка 1 002A:40EB 80FA
Точка 2 002A:410E 1E06
Точка 2A 002A:41D1 2ACD
DOS 3.30
Точка 0 0070:05DC 892E
Точка 1 0294:1460 3A2E
Точка 2 0294:1480
Точка 2A 0294:151B 2ACD
DOS 3.10 Точка 0 0070:0D43
DOS 3.20 Точка 0 0070:17D0
Точка 2 является оптимальной, то есть в нее целесообразнее всего передавать управление, чтобы обойти резидентные антивирусные мониторы. Точка 2A – это позиция инструкции INT 2Ah, которую DOS обязательно выполняет в процессе обработки 21-го прерывания.