🗊Презентация Техника отладки драйверов

Нажмите для полного просмотра!
Техника отладки драйверов, слайд №1Техника отладки драйверов, слайд №2Техника отладки драйверов, слайд №3Техника отладки драйверов, слайд №4Техника отладки драйверов, слайд №5Техника отладки драйверов, слайд №6Техника отладки драйверов, слайд №7Техника отладки драйверов, слайд №8Техника отладки драйверов, слайд №9Техника отладки драйверов, слайд №10Техника отладки драйверов, слайд №11Техника отладки драйверов, слайд №12Техника отладки драйверов, слайд №13Техника отладки драйверов, слайд №14Техника отладки драйверов, слайд №15Техника отладки драйверов, слайд №16Техника отладки драйверов, слайд №17Техника отладки драйверов, слайд №18Техника отладки драйверов, слайд №19Техника отладки драйверов, слайд №20Техника отладки драйверов, слайд №21Техника отладки драйверов, слайд №22Техника отладки драйверов, слайд №23Техника отладки драйверов, слайд №24Техника отладки драйверов, слайд №25Техника отладки драйверов, слайд №26Техника отладки драйверов, слайд №27Техника отладки драйверов, слайд №28Техника отладки драйверов, слайд №29

Содержание

Вы можете ознакомиться и скачать презентацию на тему Техника отладки драйверов. Доклад-сообщение содержит 29 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Лабораторная работа №6
«Изучение техники отладки драйверов»
Описание слайда:
Лабораторная работа №6 «Изучение техники отладки драйверов»

Слайд 2





Введение
Драйвер, строго говоря, – это фрагмент кода операционной системы, который позволяет ей обращаться к аппаратуре. Иными словами, драйвер представляет собой в принципе обычную программу, но работающую в режиме ядра или на «нулевом кольце защиты», известном из курса языков ассемблера. 
При разработке драйвера или исследовании стороннего, уже написанного, возникает резонный вопрос об отладке. Отладка кода режима ядра существенно сложнее, чем отладка обычных программ. Так, если для отладки пользовательского кода можно использовать привычные дебаггеры, такие как Visual Studio, IDA, OllyDbg и т.п.,  то для отладки кода режима ядра требуются спецсредства.
Описание слайда:
Введение Драйвер, строго говоря, – это фрагмент кода операционной системы, который позволяет ей обращаться к аппаратуре. Иными словами, драйвер представляет собой в принципе обычную программу, но работающую в режиме ядра или на «нулевом кольце защиты», известном из курса языков ассемблера. При разработке драйвера или исследовании стороннего, уже написанного, возникает резонный вопрос об отладке. Отладка кода режима ядра существенно сложнее, чем отладка обычных программ. Так, если для отладки пользовательского кода можно использовать привычные дебаггеры, такие как Visual Studio, IDA, OllyDbg и т.п., то для отладки кода режима ядра требуются спецсредства.

Слайд 3





Постановка задачи
Изучение инструментов, предназначенных для отладки драйверов и их настроек
Изучение техники отладки драйверов
Применение способа отладки драйвера на практике
Описание слайда:
Постановка задачи Изучение инструментов, предназначенных для отладки драйверов и их настроек Изучение техники отладки драйверов Применение способа отладки драйвера на практике

Слайд 4





Общие сведения
Обычно выделяют два подхода к отладке драйверов:
Отладчик работает на той же машине, что и исследуемый код
Отладчик работает на другой машине
При отладке драйверов и компонентов ОС в большинстве случаев используется второй способ, что обусловлено следующими причинами:
Практически при любой ошибке кода, выполняющегося на уровне ядра, система выдает сообщение о критической системной ошибке – так называемый “синий экран смерти, BSoD” и прекращает работу вместе с отладчиком.
При попадании на точку останова (int 3) система останавливается вместе с локальным отладчиком.
Существуют способы отладки драйверов на реальных машинах, к которым отладчик подключается по сети, COM-порту или по USB, но такой способ почти не практикуется. Обычно тестируемый код запускается на виртуальной машине, а отладчик подключается по именованному каналу.
В связи с вышеописанными особенностями, сформулируем начальные условия выполнения задания.
Описание слайда:
Общие сведения Обычно выделяют два подхода к отладке драйверов: Отладчик работает на той же машине, что и исследуемый код Отладчик работает на другой машине При отладке драйверов и компонентов ОС в большинстве случаев используется второй способ, что обусловлено следующими причинами: Практически при любой ошибке кода, выполняющегося на уровне ядра, система выдает сообщение о критической системной ошибке – так называемый “синий экран смерти, BSoD” и прекращает работу вместе с отладчиком. При попадании на точку останова (int 3) система останавливается вместе с локальным отладчиком. Существуют способы отладки драйверов на реальных машинах, к которым отладчик подключается по сети, COM-порту или по USB, но такой способ почти не практикуется. Обычно тестируемый код запускается на виртуальной машине, а отладчик подключается по именованному каналу. В связи с вышеописанными особенностями, сформулируем начальные условия выполнения задания.

Слайд 5





Начальные условия
VMWare Workstation для запуска виртуальной машины
Виртуальная машина Windows XP SP3
Виртуальная машина Windows 7
Отладчик WinDBG , который входит в пакет WDK, установленный на виртуальной машине с Windows 7 (C:\WinDDK). В данной лаборатоной работе используется версия 7 пакета, которую бесплатно можно скачать с сайта Microsoft.
После того, как все необходимое установлено, можно переходить к выполнению лабораторной работы.
Описание слайда:
Начальные условия VMWare Workstation для запуска виртуальной машины Виртуальная машина Windows XP SP3 Виртуальная машина Windows 7 Отладчик WinDBG , который входит в пакет WDK, установленный на виртуальной машине с Windows 7 (C:\WinDDK). В данной лаборатоной работе используется версия 7 пакета, которую бесплатно можно скачать с сайта Microsoft. После того, как все необходимое установлено, можно переходить к выполнению лабораторной работы.

Слайд 6





Шаг 1.1 Настройка целевой системы Windows XP
Для настройки целевой системы, на которой будет производиться запуск драйвера (в данной лабораторной – это машина с ОС Windows XP) выполняем следующую последовательность действий.
В пункте «Settings» вкладки «VM» выбираем вкладку «Hardware» и жмем кнопку «Add». В списке «Hardware type» выбираем «Serial Port», нажимаем кнопку «Next».
Описание слайда:
Шаг 1.1 Настройка целевой системы Windows XP Для настройки целевой системы, на которой будет производиться запуск драйвера (в данной лабораторной – это машина с ОС Windows XP) выполняем следующую последовательность действий. В пункте «Settings» вкладки «VM» выбираем вкладку «Hardware» и жмем кнопку «Add». В списке «Hardware type» выбираем «Serial Port», нажимаем кнопку «Next».

Слайд 7





Шаг 1.1 Настройка целевой системы Windows XP
Выбираем тип последовательного порта «Output to named pipe», нажимаем «Next»
Описание слайда:
Шаг 1.1 Настройка целевой системы Windows XP Выбираем тип последовательного порта «Output to named pipe», нажимаем «Next»

Слайд 8





Шаг 1.1 Настройка целевой системы Windows XP
Имя pipe. Можно оставить по умолчанию. Если виртуальных машин для отладки  много (например, различные версии ОС), то есть смысл дать каналам осмысленные имена.
Выбираем «This end is the server»
Выбираем «The other end is virtual machine»
Устанавливаем значение параметра «Connect at power on»
Нажимаем «Finish».
Описание слайда:
Шаг 1.1 Настройка целевой системы Windows XP Имя pipe. Можно оставить по умолчанию. Если виртуальных машин для отладки много (например, различные версии ОС), то есть смысл дать каналам осмысленные имена. Выбираем «This end is the server» Выбираем «The other end is virtual machine» Устанавливаем значение параметра «Connect at power on» Нажимаем «Finish».

Слайд 9





Шаг 1.1 Настройка целевой системы Windows XP
После того, как выполнены предыдущие шаги и порт создан, на вкладке параметров порта установим параметр «Yield CPU on poll» и нажмём «ОК»
Описание слайда:
Шаг 1.1 Настройка целевой системы Windows XP После того, как выполнены предыдущие шаги и порт создан, на вкладке параметров порта установим параметр «Yield CPU on poll» и нажмём «ОК»

Слайд 10





Шаг 1.1 Настройка целевой системы Windows XP
Теперь нужно настроить непосредственно операционную систему, поэтому включим машину с ОС Windows XP. 
Включим режим отладки - для этого нужно дописать несколько строк в файл Boot.ini. Чтобы его отредактировать - заходим в «Мой компьютер», далее «Свойства» - вкладка «Дополнительно». «Загрузка и восстановление» - «Параметры» - «Правка». Файл Boot.ini открыт. 
Копируем строку, с помощью которой загружается система, вставляем ее и дописываем к ней следующее содержание: /noexecute=optin /fastdetect /sos /bootlog /debug /debugport=<имя_порта_из_настройки_виртуальной_машины> /baudrate=115200.
Например, содержимое файла может выглядеть как на скриншоте справа.
Отметим, что данный способ работает только на ОС не новее Windows XP. если Вы используете виртуальную машину с более новой ОС воспользуйтесь утилитой bcdedit.
После изменений содержимого файла boot.ini, систему необходимо перезагрузить.
Описание слайда:
Шаг 1.1 Настройка целевой системы Windows XP Теперь нужно настроить непосредственно операционную систему, поэтому включим машину с ОС Windows XP. Включим режим отладки - для этого нужно дописать несколько строк в файл Boot.ini. Чтобы его отредактировать - заходим в «Мой компьютер», далее «Свойства» - вкладка «Дополнительно». «Загрузка и восстановление» - «Параметры» - «Правка». Файл Boot.ini открыт. Копируем строку, с помощью которой загружается система, вставляем ее и дописываем к ней следующее содержание: /noexecute=optin /fastdetect /sos /bootlog /debug /debugport=<имя_порта_из_настройки_виртуальной_машины> /baudrate=115200. Например, содержимое файла может выглядеть как на скриншоте справа. Отметим, что данный способ работает только на ОС не новее Windows XP. если Вы используете виртуальную машину с более новой ОС воспользуйтесь утилитой bcdedit. После изменений содержимого файла boot.ini, систему необходимо перезагрузить.

Слайд 11





Шаг 1.2 Настройка целевой системы Windows 7
Для настройки целевой системы, на которой будет производиться отладка драйвера (в данной лабораторной – это машина с ОС Windows 7) выполняем следующую последовательность действий.
В пункте «Settings» вкладки «VM» выбираем вкладку «Hardware» и жмем кнопку «Add». В списке «Hardware type» выбираем «Serial Port», нажимаем кнопку «Next».
Описание слайда:
Шаг 1.2 Настройка целевой системы Windows 7 Для настройки целевой системы, на которой будет производиться отладка драйвера (в данной лабораторной – это машина с ОС Windows 7) выполняем следующую последовательность действий. В пункте «Settings» вкладки «VM» выбираем вкладку «Hardware» и жмем кнопку «Add». В списке «Hardware type» выбираем «Serial Port», нажимаем кнопку «Next».

Слайд 12





Шаг 1.2 Настройка целевой системы Windows 7
Выбираем тип последовательного порта «Output to named pipe», нажимаем «Next»
Описание слайда:
Шаг 1.2 Настройка целевой системы Windows 7 Выбираем тип последовательного порта «Output to named pipe», нажимаем «Next»

Слайд 13





Шаг 1.2 Настройка целевой системы Windows 7
Имя pipe. Должно совпадать с именем пайпа из настройки Windows XP.
Выбираем «This end is the client». Обратите внимание, что в отличие от настройки Windows XP, устанавливается параметр клиента 
Выбираем «The other end is virtual machine»
Устанавливаем значение параметра «Connect at power on»
Нажимаем «Finish».
Более, порт не настраивается и, в отличие от настройки Windows XP, параметр «Yield CPU on poll» не устанавливается.
Описание слайда:
Шаг 1.2 Настройка целевой системы Windows 7 Имя pipe. Должно совпадать с именем пайпа из настройки Windows XP. Выбираем «This end is the client». Обратите внимание, что в отличие от настройки Windows XP, устанавливается параметр клиента Выбираем «The other end is virtual machine» Устанавливаем значение параметра «Connect at power on» Нажимаем «Finish». Более, порт не настраивается и, в отличие от настройки Windows XP, параметр «Yield CPU on poll» не устанавливается.

Слайд 14





Шаг 2. Настройка отладчика
Произведем настройку WinDbg, которая ускорит запуск отладчика.
Для отладки системных компонентов нужна символьная информация. Для того, чтобы WinDbg смог использовать уже установленные символы, нужно либо каждый раз указывать путь, либо добавить эту информацию в параметры запуска. Чтобы подключиться к конкретному pipe, необходимо указать его имя. Также, как и в случае с символами, имя указывается либо после запуска, либо как ключ.
Удобно для каждого имени pipe создать свой ярлык с параметрами, что сэкономит время при каждом запуске. Итак, в рабочей директории создаем ярлык со следующими параметрами:
Объект: "Путь_до_windbg.exe" -b -k com:port=имя_pipe,baud=115200
Например, это может выглядеть как на скриншоте.
Описание слайда:
Шаг 2. Настройка отладчика Произведем настройку WinDbg, которая ускорит запуск отладчика. Для отладки системных компонентов нужна символьная информация. Для того, чтобы WinDbg смог использовать уже установленные символы, нужно либо каждый раз указывать путь, либо добавить эту информацию в параметры запуска. Чтобы подключиться к конкретному pipe, необходимо указать его имя. Также, как и в случае с символами, имя указывается либо после запуска, либо как ключ. Удобно для каждого имени pipe создать свой ярлык с параметрами, что сэкономит время при каждом запуске. Итак, в рабочей директории создаем ярлык со следующими параметрами: Объект: "Путь_до_windbg.exe" -b -k com:port=имя_pipe,baud=115200 Например, это может выглядеть как на скриншоте.

Слайд 15





Шаг 3. Проверка настроек
Для проверки запустим виртуальные машины. 
При запуске Windows XP выбираем пункт меню загрузки с отладчиком.
Описание слайда:
Шаг 3. Проверка настроек Для проверки запустим виртуальные машины. При запуске Windows XP выбираем пункт меню загрузки с отладчиком.

Слайд 16





Шаг 3. Проверка настроек
В момент загрузки При появлении логотипа Windows запускаем WinDbg на машине с ОС Windows 7 с помощью созданного ранее ярлыка. Если все сделано верно, то на экране, в окне «Command» будет то же, что и на скриншоте.
Описание слайда:
Шаг 3. Проверка настроек В момент загрузки При появлении логотипа Windows запускаем WinDbg на машине с ОС Windows 7 с помощью созданного ранее ярлыка. Если все сделано верно, то на экране, в окне «Command» будет то же, что и на скриншоте.

Слайд 17





Шаг 3. Проверка настроек
Если на предыдущем шаге что-то не получилось и ниже надписи “Waiting to reconnect” ничего нет, значит отладчик не подключился. Возможно, Вы просто не успели. 
В качестве возможного решения, предлагается приостановить систему, нажав комбинацию клавиш «Ctrl+Break», и, если в окне “Command” появилось то же, что и на скриншоте, то все в порядке. Возобновите работу системы, нажав «f5», и продолжайте работать.
Описание слайда:
Шаг 3. Проверка настроек Если на предыдущем шаге что-то не получилось и ниже надписи “Waiting to reconnect” ничего нет, значит отладчик не подключился. Возможно, Вы просто не успели. В качестве возможного решения, предлагается приостановить систему, нажав комбинацию клавиш «Ctrl+Break», и, если в окне “Command” появилось то же, что и на скриншоте, то все в порядке. Возобновите работу системы, нажав «f5», и продолжайте работать.

Слайд 18





Шаг 4. Написание тестового драйвера
Для того, чтобы написанный в среде Visual studio драйвер корректно запускался на гостевой машине, необходимо произвести настройки проекта. 
Написание драйвера начинается с создания проекта Win32 и его настройки. Значения параметров для разделов VC++ Directories и C/C++ приведены на слайде.
Описание слайда:
Шаг 4. Написание тестового драйвера Для того, чтобы написанный в среде Visual studio драйвер корректно запускался на гостевой машине, необходимо произвести настройки проекта. Написание драйвера начинается с создания проекта Win32 и его настройки. Значения параметров для разделов VC++ Directories и C/C++ приведены на слайде.

Слайд 19





Шаг 4. Написание тестового драйвера
Далее производится настройка линковщика. Необходимые параметры указаны на слайде.
Описание слайда:
Шаг 4. Написание тестового драйвера Далее производится настройка линковщика. Необходимые параметры указаны на слайде.

Слайд 20





Шаг 4. Написание тестового драйвера
В настроенный проект добавим файл “HelloWorldDriver.c”, содержащий точку входа DriverEntry и приветственное сообщение, как это сделано справа. 
Компилируем. Если все прошло нормально, то в папке bin/Debug появится файл Driver.sys – это и есть файл драйвера.
Описание слайда:
Шаг 4. Написание тестового драйвера В настроенный проект добавим файл “HelloWorldDriver.c”, содержащий точку входа DriverEntry и приветственное сообщение, как это сделано справа. Компилируем. Если все прошло нормально, то в папке bin/Debug появится файл Driver.sys – это и есть файл драйвера.

Слайд 21





Шаг 5. Проверка работы драйвера
Запускаем WinDbg через созданный ранее ярлык, запускаем виртуальную машину. На заставке с выбором ОС выбираем вариант с припиской “[с отладчиком]”. Ожидаем загрузки.
На диске С: создадим папку Driver, куда скопируем получившийся Driver.sys. Запускаем командную строку и выполняем команды:
sc create Driver binPath= C:/Driver/Driver.sys type= kernel
sc start Driver
Если обе операции прошли успешно, то в окне WinDbg вы увидите “Hello, world!”, а значит, драйвер написан и корректно работает. Для остановки и удаления нужно в командной строке выполнить команды:
sc stop Driver
sc delete Driver
Для удобвства, можно создать bat-файл, удаляющий старую версию драйвера и запускающий новую.
Описание слайда:
Шаг 5. Проверка работы драйвера Запускаем WinDbg через созданный ранее ярлык, запускаем виртуальную машину. На заставке с выбором ОС выбираем вариант с припиской “[с отладчиком]”. Ожидаем загрузки. На диске С: создадим папку Driver, куда скопируем получившийся Driver.sys. Запускаем командную строку и выполняем команды: sc create Driver binPath= C:/Driver/Driver.sys type= kernel sc start Driver Если обе операции прошли успешно, то в окне WinDbg вы увидите “Hello, world!”, а значит, драйвер написан и корректно работает. Для остановки и удаления нужно в командной строке выполнить команды: sc stop Driver sc delete Driver Для удобвства, можно создать bat-файл, удаляющий старую версию драйвера и запускающий новую.

Слайд 22





Шаг 6.Отладка драйвера
Для наполнения драйвера копируем в проект содержимое файла-приложения к лабораторной «Driver.c». Чтобы поставить точку останова в некотором месте программы, нужно вставить в это место строчку DbgBreakPoint(). Данная функция состоит из одной команды – int 3, известной из курса языков ассемблера.
Например, вызываем эту функцию перед первым DbgPrint(). Проделываем последовательность действий из шага 5 и запускаем драйвер, не забывая удалить предыдущую версию. Когда выполнение дойдет до DbgBreakPoint(), система зависнет и управление передастся отладчику. Далее, аналогично отладке обычной программы (пошагово; выполнение до курсора; выполнение до следующей точки) проходим программу. Расставляя таким образом точки останова в программе, можно его отладить.
WinDBG показывает исходный код драйвера, но только при одном условии: выполняется именно та версия драйвера, которая была скомпилирована последней (то есть версия запущенного драйвера и pdb-файла совпадают). Поэтому при внесении каких-либо изменений в код компилируйте, копируйте и запускайте драйвер.
Описание слайда:
Шаг 6.Отладка драйвера Для наполнения драйвера копируем в проект содержимое файла-приложения к лабораторной «Driver.c». Чтобы поставить точку останова в некотором месте программы, нужно вставить в это место строчку DbgBreakPoint(). Данная функция состоит из одной команды – int 3, известной из курса языков ассемблера. Например, вызываем эту функцию перед первым DbgPrint(). Проделываем последовательность действий из шага 5 и запускаем драйвер, не забывая удалить предыдущую версию. Когда выполнение дойдет до DbgBreakPoint(), система зависнет и управление передастся отладчику. Далее, аналогично отладке обычной программы (пошагово; выполнение до курсора; выполнение до следующей точки) проходим программу. Расставляя таким образом точки останова в программе, можно его отладить. WinDBG показывает исходный код драйвера, но только при одном условии: выполняется именно та версия драйвера, которая была скомпилирована последней (то есть версия запущенного драйвера и pdb-файла совпадают). Поэтому при внесении каких-либо изменений в код компилируйте, копируйте и запускайте драйвер.

Слайд 23





Шаг 6.Отладка драйвера
Для удобства отладки можно настроить WinDBG под свои нужды (выберите пункт меню View , где расположены такие средства, как просмотр регистров, редактор памяти и др.) В приложении к лабораторной лежит файл windbgdark.reg. Если принять эти установки реестра (возможно, в учебной аудитории этого сделать не получится из-за ограничения в правах), то внешний вид WinDBG примет более удобный вид: темные цвета и удобное расположение окон.
Описание слайда:
Шаг 6.Отладка драйвера Для удобства отладки можно настроить WinDBG под свои нужды (выберите пункт меню View , где расположены такие средства, как просмотр регистров, редактор памяти и др.) В приложении к лабораторной лежит файл windbgdark.reg. Если принять эти установки реестра (возможно, в учебной аудитории этого сделать не получится из-за ограничения в правах), то внешний вид WinDBG примет более удобный вид: темные цвета и удобное расположение окон.

Слайд 24





Шаг 7. Исправление ошибки в драйвере
Работа предлагаемого Вам драйвера заключается в перехвате системной функции NtCreateFile.
Перехватчик просматривает имя файла и, если его расширение '.xxx', то заменяет на 'yyy' и оповещает об этом консольную клиентскую программу.
Если создать тексотвый файл (с любым содержимым) и сохранить его как, например, 'C:\example.xxx', то появится файл 'C:\example.yyy'
Однако, если сделать то же самое, но сохранить файл на рабочий стол в папку example, то есть по адресу 'C:\Documents and Settings\Администратор\Desktop\example\example.xxx', то имя файла никак не изменится и, соответственно, оповещения клиентской программе не поступит. Очевидна ошибка в работе драйвера, работоспособность которого зависит от внешних факторов.
В качестве одного из методов обнаружения ошибки драйвера, можно предложить пройти пошагово весь алгоритм его работы, однако в существующих драйверах кода очень много, поэтому поступим более рационально, рассуждая и выдвигая гипотезы.
Описание слайда:
Шаг 7. Исправление ошибки в драйвере Работа предлагаемого Вам драйвера заключается в перехвате системной функции NtCreateFile. Перехватчик просматривает имя файла и, если его расширение '.xxx', то заменяет на 'yyy' и оповещает об этом консольную клиентскую программу. Если создать тексотвый файл (с любым содержимым) и сохранить его как, например, 'C:\example.xxx', то появится файл 'C:\example.yyy' Однако, если сделать то же самое, но сохранить файл на рабочий стол в папку example, то есть по адресу 'C:\Documents and Settings\Администратор\Desktop\example\example.xxx', то имя файла никак не изменится и, соответственно, оповещения клиентской программе не поступит. Очевидна ошибка в работе драйвера, работоспособность которого зависит от внешних факторов. В качестве одного из методов обнаружения ошибки драйвера, можно предложить пройти пошагово весь алгоритм его работы, однако в существующих драйверах кода очень много, поэтому поступим более рационально, рассуждая и выдвигая гипотезы.

Слайд 25





Шаг 7. Исправление ошибки в драйвере
Гипотеза №1
	Предположение: Некорректно перехватилась функция NtCreateFile.

	Опровержение: Если сохраняем файл в корне диска C:, то все отрабатывает корректно, что противоречит предположению.
Описание слайда:
Шаг 7. Исправление ошибки в драйвере Гипотеза №1 Предположение: Некорректно перехватилась функция NtCreateFile. Опровержение: Если сохраняем файл в корне диска C:, то все отрабатывает корректно, что противоречит предположению.

Слайд 26





Шаг 7. Исправление ошибки в драйвере
Гипотеза №2
Предположение: Драйвер находит этот файл, но по некоторым причинам не изменяет его расширение.
Проверка гипотезы: Установим точку останова на строку 72 файла NtCreateFileInterceptor.c. В этом месте расширение заменяется на 'yyy'.
Запустим драйвер на обоих примерах (в принципе достаточно на втором, но для надёжности следует запускать и корректный вариант).
Результат: В первом случае отладчик остановился на поставленной точке как это показано на скриншоте, во втором - нет. То есть до этого места управление не дошло. Гипотеза не подтвердилась.
Описание слайда:
Шаг 7. Исправление ошибки в драйвере Гипотеза №2 Предположение: Драйвер находит этот файл, но по некоторым причинам не изменяет его расширение. Проверка гипотезы: Установим точку останова на строку 72 файла NtCreateFileInterceptor.c. В этом месте расширение заменяется на 'yyy'. Запустим драйвер на обоих примерах (в принципе достаточно на втором, но для надёжности следует запускать и корректный вариант). Результат: В первом случае отладчик остановился на поставленной точке как это показано на скриншоте, во втором - нет. То есть до этого места управление не дошло. Гипотеза не подтвердилась.

Слайд 27





Шаг 7. Исправление ошибки в драйвере
Гипотеза №3
Предположение: Некорректно перехватилась функция NtCreateFile.
Проверка гипотезы: Из кода видно, что расширение будет заменено, если выполнилось условие в строке 65 файла «NtCreateFileInterceptor.c»: 
if (EndsWith(fileName, DISALLOWED_EXTENSION)) 
Поставим точку останова перед данным блоком if и запустим драйвер. Для обоих значений отладчик остановится в этом месте. Для некорректно работающего значения выполним 2 шага без захода (F10) и обнаружим, что управление в данный блок if не заходит. Значит, функция EndsWith некорректно срабатывает и драйвер действительно пропускает этот файл. Гипотеза подтвердилась. Двигаемся дальше.
Описание слайда:
Шаг 7. Исправление ошибки в драйвере Гипотеза №3 Предположение: Некорректно перехватилась функция NtCreateFile. Проверка гипотезы: Из кода видно, что расширение будет заменено, если выполнилось условие в строке 65 файла «NtCreateFileInterceptor.c»: if (EndsWith(fileName, DISALLOWED_EXTENSION)) Поставим точку останова перед данным блоком if и запустим драйвер. Для обоих значений отладчик остановится в этом месте. Для некорректно работающего значения выполним 2 шага без захода (F10) и обнаружим, что управление в данный блок if не заходит. Значит, функция EndsWith некорректно срабатывает и драйвер действительно пропускает этот файл. Гипотеза подтвердилась. Двигаемся дальше.

Слайд 28





Шаг 7. Исправление ошибки в драйвере
Проверим функцию EndsWith в файле «NtCreateFileInterceptor.c». В нашем случае, для поиска ошибки необходимо пошагово пройти всю функцию, включая цикл.
При сохранении файла на рабочий стол, на первой же итерации цикла вернется FALSE. Подумаем, почему так произошло и почему str[strLen - substrLen] != 'x'. Понятно, что strLen имеет некорректное значение. В то же время, пошаговая отладка случая, когда файл сохраняется на диск C: не выявляет никаких ошибок в функции EndsWith(). Необходимо понять, чем различаются два этих случая. Возможные варианты: 
Проблемы с русскими буквами в полном названии файла. Для проверки создадим нового пользователя 'user'. Файл сохранился в директории «C:\Documents and Settings\user\Desktop\». Гипотеза не опровергнута. Попробуем создать на рабочем столе папку example и сохранить в директорию «C:\Documents and Settings\user\Desktop\example\». Снова драйвер работает ошибочно.
Неверно вычисляется длина строки с местом расположения файла. В первом случае длина строки маленькая, во втором - большая. Длину строки получает функция RtlStringCchLengthW из строки 27. Посмотрим ее описание на MSDN. Второй параметр - size_t  cchMax – максимальная длина. И если строка на самом деле больше, то функция не вернет корректную длину строки. В нашей программе второй параметр равен 64. Изменим на большее значение (например, 1024). После этого исправления драйвер отработает правильно.
Описание слайда:
Шаг 7. Исправление ошибки в драйвере Проверим функцию EndsWith в файле «NtCreateFileInterceptor.c». В нашем случае, для поиска ошибки необходимо пошагово пройти всю функцию, включая цикл. При сохранении файла на рабочий стол, на первой же итерации цикла вернется FALSE. Подумаем, почему так произошло и почему str[strLen - substrLen] != 'x'. Понятно, что strLen имеет некорректное значение. В то же время, пошаговая отладка случая, когда файл сохраняется на диск C: не выявляет никаких ошибок в функции EndsWith(). Необходимо понять, чем различаются два этих случая. Возможные варианты: Проблемы с русскими буквами в полном названии файла. Для проверки создадим нового пользователя 'user'. Файл сохранился в директории «C:\Documents and Settings\user\Desktop\». Гипотеза не опровергнута. Попробуем создать на рабочем столе папку example и сохранить в директорию «C:\Documents and Settings\user\Desktop\example\». Снова драйвер работает ошибочно. Неверно вычисляется длина строки с местом расположения файла. В первом случае длина строки маленькая, во втором - большая. Длину строки получает функция RtlStringCchLengthW из строки 27. Посмотрим ее описание на MSDN. Второй параметр - size_t cchMax – максимальная длина. И если строка на самом деле больше, то функция не вернет корректную длину строки. В нашей программе второй параметр равен 64. Изменим на большее значение (например, 1024). После этого исправления драйвер отработает правильно.

Слайд 29





Итоги
В ходе лабораторной работы были изучены основные подходы к отладке драйверов, а также предназначенные для этого инструменты. Кроме того, на практике был отработан один из методов отладки драйверов.
Описание слайда:
Итоги В ходе лабораторной работы были изучены основные подходы к отладке драйверов, а также предназначенные для этого инструменты. Кроме того, на практике был отработан один из методов отладки драйверов.



Похожие презентации
Mypresentation.ru
Загрузить презентацию