Презентация Техника отладки драйверов онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Техника отладки драйверов абсолютно бесплатно. Урок-презентация на эту тему содержит всего 29 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Техника отладки драйверов
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:29 слайдов
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:309.71 kB
- Просмотров:59
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№2 слайд
![Введение Драйвер, строго](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img1.jpg)
Содержание слайда: Введение
Драйвер, строго говоря, – это фрагмент кода операционной системы, который позволяет ей обращаться к аппаратуре. Иными словами, драйвер представляет собой в принципе обычную программу, но работающую в режиме ядра или на «нулевом кольце защиты», известном из курса языков ассемблера.
При разработке драйвера или исследовании стороннего, уже написанного, возникает резонный вопрос об отладке. Отладка кода режима ядра существенно сложнее, чем отладка обычных программ. Так, если для отладки пользовательского кода можно использовать привычные дебаггеры, такие как Visual Studio, IDA, OllyDbg и т.п., то для отладки кода режима ядра требуются спецсредства.
№4 слайд
![Общие сведения Обычно](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img3.jpg)
Содержание слайда: Общие сведения
Обычно выделяют два подхода к отладке драйверов:
Отладчик работает на той же машине, что и исследуемый код
Отладчик работает на другой машине
При отладке драйверов и компонентов ОС в большинстве случаев используется второй способ, что обусловлено следующими причинами:
Практически при любой ошибке кода, выполняющегося на уровне ядра, система выдает сообщение о критической системной ошибке – так называемый “синий экран смерти, BSoD” и прекращает работу вместе с отладчиком.
При попадании на точку останова (int 3) система останавливается вместе с локальным отладчиком.
Существуют способы отладки драйверов на реальных машинах, к которым отладчик подключается по сети, COM-порту или по USB, но такой способ почти не практикуется. Обычно тестируемый код запускается на виртуальной машине, а отладчик подключается по именованному каналу.
В связи с вышеописанными особенностями, сформулируем начальные условия выполнения задания.
№5 слайд
![Начальные условия VMWare](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img4.jpg)
Содержание слайда: Начальные условия
VMWare Workstation для запуска виртуальной машины
Виртуальная машина Windows XP SP3
Виртуальная машина Windows 7
Отладчик WinDBG , который входит в пакет WDK, установленный на виртуальной машине с Windows 7 (C:\WinDDK). В данной лаборатоной работе используется версия 7 пакета, которую бесплатно можно скачать с сайта Microsoft.
После того, как все необходимое установлено, можно переходить к выполнению лабораторной работы.
№6 слайд
![Шаг . Настройка целевой](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img5.jpg)
Содержание слайда: Шаг 1.1 Настройка целевой системы Windows XP
Для настройки целевой системы, на которой будет производиться запуск драйвера (в данной лабораторной – это машина с ОС Windows XP) выполняем следующую последовательность действий.
В пункте «Settings» вкладки «VM» выбираем вкладку «Hardware» и жмем кнопку «Add». В списке «Hardware type» выбираем «Serial Port», нажимаем кнопку «Next».
№8 слайд
![Шаг . Настройка целевой](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img7.jpg)
Содержание слайда: Шаг 1.1 Настройка целевой системы Windows XP
Имя pipe. Можно оставить по умолчанию. Если виртуальных машин для отладки много (например, различные версии ОС), то есть смысл дать каналам осмысленные имена.
Выбираем «This end is the server»
Выбираем «The other end is virtual machine»
Устанавливаем значение параметра «Connect at power on»
Нажимаем «Finish».
№10 слайд
![Шаг . Настройка целевой](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img9.jpg)
Содержание слайда: Шаг 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 слайд
![Шаг . Настройка целевой](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img10.jpg)
Содержание слайда: Шаг 1.2 Настройка целевой системы Windows 7
Для настройки целевой системы, на которой будет производиться отладка драйвера (в данной лабораторной – это машина с ОС Windows 7) выполняем следующую последовательность действий.
В пункте «Settings» вкладки «VM» выбираем вкладку «Hardware» и жмем кнопку «Add». В списке «Hardware type» выбираем «Serial Port», нажимаем кнопку «Next».
№13 слайд
![Шаг . Настройка целевой](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img12.jpg)
Содержание слайда: Шаг 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 слайд
![Шаг . Настройка отладчика](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img13.jpg)
Содержание слайда: Шаг 2. Настройка отладчика
Произведем настройку WinDbg, которая ускорит запуск отладчика.
Для отладки системных компонентов нужна символьная информация. Для того, чтобы WinDbg смог использовать уже установленные символы, нужно либо каждый раз указывать путь, либо добавить эту информацию в параметры запуска. Чтобы подключиться к конкретному pipe, необходимо указать его имя. Также, как и в случае с символами, имя указывается либо после запуска, либо как ключ.
Удобно для каждого имени pipe создать свой ярлык с параметрами, что сэкономит время при каждом запуске. Итак, в рабочей директории создаем ярлык со следующими параметрами:
Объект: "Путь_до_windbg.exe" -b -k com:port=имя_pipe,baud=115200
Например, это может выглядеть как на скриншоте.
№17 слайд
![Шаг . Проверка настроек Если](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img16.jpg)
Содержание слайда: Шаг 3. Проверка настроек
Если на предыдущем шаге что-то не получилось и ниже надписи “Waiting to reconnect” ничего нет, значит отладчик не подключился. Возможно, Вы просто не успели.
В качестве возможного решения, предлагается приостановить систему, нажав комбинацию клавиш «Ctrl+Break», и, если в окне “Command” появилось то же, что и на скриншоте, то все в порядке. Возобновите работу системы, нажав «f5», и продолжайте работать.
№18 слайд
![Шаг . Написание тестового](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img17.jpg)
Содержание слайда: Шаг 4. Написание тестового драйвера
Для того, чтобы написанный в среде Visual studio драйвер корректно запускался на гостевой машине, необходимо произвести настройки проекта.
Написание драйвера начинается с создания проекта Win32 и его настройки. Значения параметров для разделов VC++ Directories и C/C++ приведены на слайде.
№20 слайд
![Шаг . Написание тестового](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img19.jpg)
Содержание слайда: Шаг 4. Написание тестового драйвера
В настроенный проект добавим файл “HelloWorldDriver.c”, содержащий точку входа DriverEntry и приветственное сообщение, как это сделано справа.
Компилируем. Если все прошло нормально, то в папке bin/Debug появится файл Driver.sys – это и есть файл драйвера.
№21 слайд
![Шаг . Проверка работы](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img20.jpg)
Содержание слайда: Шаг 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 слайд
![Шаг .Отладка драйвера Для](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img21.jpg)
Содержание слайда: Шаг 6.Отладка драйвера
Для наполнения драйвера копируем в проект содержимое файла-приложения к лабораторной «Driver.c». Чтобы поставить точку останова в некотором месте программы, нужно вставить в это место строчку DbgBreakPoint(). Данная функция состоит из одной команды – int 3, известной из курса языков ассемблера.
Например, вызываем эту функцию перед первым DbgPrint(). Проделываем последовательность действий из шага 5 и запускаем драйвер, не забывая удалить предыдущую версию. Когда выполнение дойдет до DbgBreakPoint(), система зависнет и управление передастся отладчику. Далее, аналогично отладке обычной программы (пошагово; выполнение до курсора; выполнение до следующей точки) проходим программу. Расставляя таким образом точки останова в программе, можно его отладить.
WinDBG показывает исходный код драйвера, но только при одном условии: выполняется именно та версия драйвера, которая была скомпилирована последней (то есть версия запущенного драйвера и pdb-файла совпадают). Поэтому при внесении каких-либо изменений в код компилируйте, копируйте и запускайте драйвер.
№23 слайд
![Шаг .Отладка драйвера Для](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img22.jpg)
Содержание слайда: Шаг 6.Отладка драйвера
Для удобства отладки можно настроить WinDBG под свои нужды (выберите пункт меню View , где расположены такие средства, как просмотр регистров, редактор памяти и др.) В приложении к лабораторной лежит файл windbgdark.reg. Если принять эти установки реестра (возможно, в учебной аудитории этого сделать не получится из-за ограничения в правах), то внешний вид WinDBG примет более удобный вид: темные цвета и удобное расположение окон.
№24 слайд
![Шаг . Исправление ошибки в](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img23.jpg)
Содержание слайда: Шаг 7. Исправление ошибки в драйвере
Работа предлагаемого Вам драйвера заключается в перехвате системной функции NtCreateFile.
Перехватчик просматривает имя файла и, если его расширение '.xxx', то заменяет на 'yyy' и оповещает об этом консольную клиентскую программу.
Если создать тексотвый файл (с любым содержимым) и сохранить его как, например, 'C:\example.xxx', то появится файл 'C:\example.yyy'
Однако, если сделать то же самое, но сохранить файл на рабочий стол в папку example, то есть по адресу 'C:\Documents and Settings\Администратор\Desktop\example\example.xxx', то имя файла никак не изменится и, соответственно, оповещения клиентской программе не поступит. Очевидна ошибка в работе драйвера, работоспособность которого зависит от внешних факторов.
В качестве одного из методов обнаружения ошибки драйвера, можно предложить пройти пошагово весь алгоритм его работы, однако в существующих драйверах кода очень много, поэтому поступим более рационально, рассуждая и выдвигая гипотезы.
№26 слайд
![Шаг . Исправление ошибки в](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img25.jpg)
Содержание слайда: Шаг 7. Исправление ошибки в драйвере
Гипотеза №2
Предположение: Драйвер находит этот файл, но по некоторым причинам не изменяет его расширение.
Проверка гипотезы: Установим точку останова на строку 72 файла NtCreateFileInterceptor.c. В этом месте расширение заменяется на 'yyy'.
Запустим драйвер на обоих примерах (в принципе достаточно на втором, но для надёжности следует запускать и корректный вариант).
Результат: В первом случае отладчик остановился на поставленной точке как это показано на скриншоте, во втором - нет. То есть до этого места управление не дошло. Гипотеза не подтвердилась.
№27 слайд
![Шаг . Исправление ошибки в](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img26.jpg)
Содержание слайда: Шаг 7. Исправление ошибки в драйвере
Гипотеза №3
Предположение: Некорректно перехватилась функция NtCreateFile.
Проверка гипотезы: Из кода видно, что расширение будет заменено, если выполнилось условие в строке 65 файла «NtCreateFileInterceptor.c»:
if (EndsWith(fileName, DISALLOWED_EXTENSION))
Поставим точку останова перед данным блоком if и запустим драйвер. Для обоих значений отладчик остановится в этом месте. Для некорректно работающего значения выполним 2 шага без захода (F10) и обнаружим, что управление в данный блок if не заходит. Значит, функция EndsWith некорректно срабатывает и драйвер действительно пропускает этот файл. Гипотеза подтвердилась. Двигаемся дальше.
№28 слайд
![Шаг . Исправление ошибки в](/documents_6/cf219c8f8bb70d5006b96a4af7ea8301/img27.jpg)
Содержание слайда: Шаг 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). После этого исправления драйвер отработает правильно.
Скачать все slide презентации Техника отладки драйверов одним архивом:
Похожие презентации
-
Техники тест-дизайна. Планирование, оценка трудозатрат. Отчетность. Лекция 5
-
Техника и мир
-
Многомерные массивы. Массивы массивов. Отладка программы
-
Знакомство с редактором Visual Basic. Принципы создания собственных макросов. Средства отладки
-
Прогресс техники. Создание робота
-
Отладка и тестирование программного продукта на уровне модулей. Трансляторы
-
Ассемблер Atmel AVR. Занятие 1: Архитектура AVR, схемотехника ЭВМ
-
Средства отладки программ. Контроль текста программы
-
Тестирование и отладка программных средств
-
Схемотехника последовательных устройств