Информация
Подключение дампа памяти 3
Другие полезные команды: !drivers — выводящая список драйверов, загруженных на момент сбоя, !arbiter — показывающая всех
арбитров вместе с диапазонами арбитража, !filecache — отображающая информацию о кэше файловой системы и PT, !vm —
отчитывающаяся об использовании виртуальной памяти. Конечно, в реальной жизни определить истинного виновника краха системы
намного сложнее, поскольку всякий нормальный драйвер состоит из множества сложно взаимодействующих функций, образующих
запутанные иерархические комплексы, местами пересеченные туннелями глобальных переменных, превращающих драйвер в самый
настоящий лабиринт. Приведем только один пример. Конструкция вида mov eax, [ebx], где ebx == 0, работает вполне нормально,
послушно возбуждая исключение Нужно найти тот код, который записывает в регистр EBX нулевое значение, и сделать это непросто.
Можно, конечно, просто прокрутить экран вверх, надеясь, что на данном участке программный код выполнялся линейно,
но никаких гарантий, что это действительно так у нас нет, равно как нет и возможности обратной трассировки (back trace).
Грубо говоря, адрес предшествующей машинной инструкции нам неизвестен и закладываться на прокрутку экрана нельзя!
Загрузив подопытный драйвер в любой интеллектуальный дизассемблер, автоматически восстанавливающий перекрестные ссылки
например, дизассемблер IDA PRO, мы получим более или менее полное представление о топологии управляющих ветвей программы.
Конечно, дизассемблирование в силу своей статической природы, не гарантирует, что управление не перекинулось откуда-то еще, но
по крайней мере, сужает круг поиска. Вообще же, о дизассемблировании написано множество хороших книг
|