

2.2. Установка драйвера
2.2.1.
Добавим в файл CONFIG.SYS строку "DEVICE= C:\DRIVER \DRIVER.SYS" (Рис. 2.6)
Рис. 2.6. Редактирование CONFIG.sys.
2.2.2.
Перезапуская систему видим сообщение драйвера "THIS IS DOS-DRIVER" (Рис. 2.7).
Рис. 2.7. Перезапуск системы.
14

2.2.3.
Запустим диагностическую программу CHECKIT, чтобы определить логический ад-
рес драйвера по его имени (Рис. 2.8), выбрав SysInfo > Device Drivers.
Рис. 2.8. Запуск CHECKIT.
Логический адрес: 0E11:0000.
2.2.4.
Запустим отладчик AFDRUS, определим исполнительные адреса процедур СТРА-
ТЕГИЯ и ПРЕРЫВАНИЕ. Сравним их с адресами в файле карты памяти драйвера
DRIVER.MAP.
Вфайле DRIVER.MAP (Рис. 2.9) имеем Стратегия 0000:0063, Прерывание 0000:06E.
Вafdrus, в свою очередь (адреса процедур определены по Рис. 2.10, 2.11),
Стратегия 0E11:0063, Прерывание 0E11:06E.
Адреса отличаются только сегментом. Это объясняется тем, что в driver.map указы-
вается адрес относительно начала выделенного сегмента (0E11), а в afdrus - относительно начала памяти (0000).
15

Рис. 2.9. Содержимое driver.map
Рис. 2.10. Стратегия в afdrus
Рис. 2.11. Прерывание в afdrus
16

2.3. Отладка драйвера
2.3.1.
Загружаем в отладчик afdrus тестовую программу TEST.EXE (предварительно ско-
пировав afdrus в папку DRIVER). Получаем адрес сегмента 31F5.
>> L test.exe
Рис. 2.12. Загрузка test.exe в afdrus
Определяем точки останова:
•Для B1 - 0E
•Для B2 - 1F
Устанавливаем соответствующие точки останова (Рис. 2.13)
Рис. 2.13. Установка точек останова
2.3.2.
Запускаем программу с помощью G. При остановке на точке стратегии (BR3, Рис. 2.14). Установив окно M2 на ES, расшифруем заголовок запроса:
17

•0D длина заголовка (13 байт);
•00 код устройства;
•0D код команды, которую надо выполнить (13 - OPEN);
•Ошибок нет и команда не завершена.
Рис. 2.14. Остановка на стратегии
Далее выполняем пошагово программу (F2) до возврата (команда RET, Рис. 2.15)
Рис. 2.15. Остановка на стратегии
18

И теперь перейдем командой G до останова на прерывании (Рис. 2.16).
Рис. 2.16. Остановка на прерывании
Продолжим исполнение (G).
2.3.3.
На останове в B1 (Рис. 2.17) определяем номер устройства: номер устройства нахо-
дится в регистре AX и равен 5.
Рис. 2.17. Остановка на прерывании
19

2.3.4.
Выполним до останова на B2 (стратегия) (Рис. 2.18). Исследуем функцию 40H.
Рис. 2.18. Остановка стратегии
Расшифруем запрос:
•16 - длина заголовка (22 байта)
•08 - команда для выполнения (8 - OUTPUT), статус 0 и команда не завершена
Продолжая выполнять программу командой G, поочередно останавливавшемся в процедуре стратегии и процедуре прерывания 5 раз (соответствует длине тестового бу-
фера). Значение в DI увеличивалось на 1 с 0B до 0F.
Наконец, попадаем в точку B2, соответсвующую закрытию устройства (Рис. 2.19).
Рис. 2.19. Закрытие устройства.
20