• Debugging tools for windows использование. Установка Debugging Tools for Windows. Установка WinDBG в Windows

    Для выявления причин возникновения синих экранов (BSOD) требуется произвести анализ дампа памяти. В подавляющем большинстве случаев достаточно минидампа, который создается системой при критических ошибках.
    В этой статье содержится пошаговая инструкция по установке и настройке WinDBG - мощного средства отладки, позволяющего выявить истинную причину возникновения BSOD.

    Шаг 1 - Настройка записи малых дампов памяти

    Шаг 2 - Установка WinDBG

    Для проведения анализа дампов памяти вам понадобится установить отладчик WinDBG, который входит в состав пакета Windows SDK. На момент написания статьи последние доступные версии Windows SDK:

    • Пакет SDK для Windows 10 (скачать сетевой установщик)
    • Пакет SDK для Windows 8.1 (скачать сетевой установщик)

    Шаг 3 - Сопоставление файлов.dmp с WinDBG

    Для упрощения процедуры чтения и анализа дампов памяти выполните сопоставление файлов.dmp с WinDBG. Это позволит открывать файлы дампов из проводника сразу в WinDBG минуя его предварительный запуск.


    Шаг 4 - Настройка сервера символов для получения файлов символов отладки


    Установка и первичная настройка WinDBG завершена. Для того, чтобы изменить его внешний вид можете перейти в меню View - настройки шрифтов вы найдете выбрав пункт Font , а настройки окон консолей в Options .

    Для выявления причин возникновения синих экранов (BSOD) требуется произвести анализ дампа памяти. В подавляющем большинстве случаев достаточно минидампа, который создается системой при критических ошибках.
    В этой статье содержится пошаговая инструкция по установке и настройке WinDBG - мощного средства отладки, позволяющего выявить истинную причину возникновения BSOD.

    Шаг 1 - Настройка записи малых дампов памяти

    Шаг 2 - Установка WinDBG

    Для проведения анализа дампов памяти вам понадобится установить отладчик WinDBG, который входит в состав пакета Windows SDK. На момент написания статьи последние доступные версии Windows SDK:

    • Пакет SDK для Windows 10 (скачать сетевой установщик)
    • Пакет SDK для Windows 8.1 (скачать сетевой установщик)

    Шаг 3 - Сопоставление файлов.dmp с WinDBG

    Для упрощения процедуры чтения и анализа дампов памяти выполните сопоставление файлов.dmp с WinDBG. Это позволит открывать файлы дампов из проводника сразу в WinDBG минуя его предварительный запуск.


    Шаг 4 - Настройка сервера символов для получения файлов символов отладки


    Установка и первичная настройка WinDBG завершена. Для того, чтобы изменить его внешний вид можете перейти в меню View - настройки шрифтов вы найдете выбрав пункт Font , а настройки окон консолей в Options .

    Такие типы сбоев обычно связаны со сбойным драйвером, который бывает трудно вычислить. Тем не менее, улучшенная система отслеживания ошибок в Windows Vista (и не только в Vista!) нередко может привести вас к проблемному файлу. В результате чего большинство людей перестает судорожно пытаться работать на нестабильном компьютере, с параноидальной регулярностью сохраняя документы и надеясь на лучшее.

    При сбоях Windows обычно создается так называемый “дамп памяти”. Последний можно исследовать с помощью бесплатного отладочного инструмента Windows Debugging Tools, который может направить вас на источник проблемы. Поэтому, все, что вам необходимо сделать, это:

    Скачать себе отладочный инструмент

    Скачать Windows Debugging Tools можно непосредственно с сайта Microsoft. Программа работает с множеством операционных систем, начиная с Windows NT 4 и оканчивая Windows 2008, поэтому проблем с ней у вас возникнуть не должно. Да, нельзя сказать, что она стабильна под Windows 7 RC , однако по нашим тестам все-таки работает. Поэтому даже попытка диагностирования проблемы из под Windows 7 RC может оказаться удачной.

    Сконфигурировать свою систему

    Необходимо, чтобы во время сбоев ваш компьютер создавал дампы памяти, которые в дальнейшей послужат источником информации для отладчика. Поэтому важно, чтобы Windows была настроена на генерацию дампов. Чтобы настроить свою операционную систему, кликните правой кнопкой мыши по Своему компьютеру (Computer) и выберите Свойства (Properties). Затем кликните по вкладке дополнительных параметров Дополнительно (Advanced System Settings), на ней найдите подраздел Загрузка и Восстановление системы (Startup and Recovery Settings) и убедитесь, что параметр Запись отладочной информации (Write debugging information) установлен в состояние Дамп памяти ядра (Kernel memory dump) или Полный дамп памяти (Complete memory dump).

    Далее кликните Пуск (Start), перейдите в Программы (All Programs), выберите Debugging Tools и запустите WinDbg. В программе пройдите в меню File и выберите Symbol File Path… Затем напишите в открывшемся окне следующую строку:

    SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

    Последняя определяет путь к специальным данным - так называемым “символам” (symbols), которые могут помочь отладочному инструменту в опознании вашего сбойного файла.

    После ввода строки, кликните по кнопке OK. В последствии при работе с отладчиком эта строка вызовет скачивание символов с msdl.microsoft.com и сохранение их в папку c:\symbols.

    Решить свою проблему

    Теперь подождите очередного сбоя с синим экраном, и последующего окончания перезагрузки компьютера. Затем еще раз запустите WinDbg (пользователям Vista необходимо запускать программу от имени администратора), кликните по меню File, выберите открытие сбойного дампа Open Crash Dump, откройте файл \Windows\MEMORY.DMP, и программа незамедлительно начнет его анализировать.

    К сожалению, WinDbg предоставляет очень мало информации о том, что она делает, поэтому вы можете даже подумать, что программа зависла. Однако подождите. Поймите, анализ, скажем, 4GB памяти на не очень мощном компьютере может занять некоторое время, вплоть до часов. Поэтому наберитесь терпения, а лучше оставьте анализ на ночь.

    Впрочем, обычно результат получается уже через несколько минут. Об этом свидетельствует строка анализатора ошибки Bugcheck Analysis, сообщающая нечто вроде "Probably caused by: UACReplace.sys". В переводе на русский это означает, что проблема, возможно, вызвана файлом UACReplace.sys. Введите его в строку поиска, например, Google и вы узнаете его реальное происхождение. В частности, если он принадлежит одной из установленных вами программ или установленному драйверу, то вы можете просто попытаться обновить ее или его. Возможно, это решит возникшие у вас проблемы.

    Надо сказать, что время от времени WinDbg не может назвать имени файла совсем или просто выбирает одну из DLL-библиотек Windows. Если это произошло и у вас, то просто кликните по командному окну над панелью статуса и наберите команду:

    После этого нажмите Enter. Это предоставит вам более детальный отчет, в котором может содержаться информация о возможных причинах ваших бед.

    Если же и в этот раз вам не повезет, не отчаивайтесь. Отладка является довольно сложным делом даже для экспертов. Поэтому просто закройте WinDbg и запустите анализатор снова после следующего сбоя. Возможно, это даст вам несколько больше информации. Удачи!

    Знакомство с WinDBG – Часть 1

    Alexander Antipov

    WinDBG – прекрасный отладчик. Возможно, у него не очень дружественный интерфейс и нет по умолчанию черного фона, но это один из самых мощных и стабильных отладчиков в ОС Windows в настоящее время. В этой статье я познакомлю вас с основами WinDBG, чтобы вы могли начать с ним работу.


    WinDBG - прекрасный отладчик. Возможно, у него не очень дружественный интерфейс и нет по умолчанию черного фона, но это один из самых мощных и стабильных отладчиков в ОС Windows в настоящее время. В этой статье я познакомлю вас с основами WinDBG, чтобы вы могли начать с ним работу.

    Эта первая статья из цикла, посвященного WinDBG. Перечень всех статей, входящих в этот цикл:

    • Часть 1 – установка, интерфейс, символы, удаленная/локальная отладка, система помощи, модули, регистры.
    • Часть 2 – точки останова.
    • Часть 3 – инспектирование памяти, пошаговая отладка программ, советы и трюки.

    В этой статье мы рассмотрим установку и подсоединение к процессу, а в следующих - точки останова, пошаговую отладку и инспектирование памяти.

    Установка WinDBG

    По сравнению с Windows 7 процесс установки WinDBG в Windows 8 претерпел небольшие изменения. В этом разделе мы рассмотрим установку отладчика для обеих операционных систем.

    Установка WinDBG в Windows 8

    В Windows 8 WinDBG включается в пакет Windows Driver Kit (WDK) . Вы можете установить Visual Studio и WDK или установить отдельно пакет «Debugging Tools for Windows 8.1», который включает WinDBG.

    Программа установки спросит, хотите ли вы установить WinDBG локально или загрузить весь пакет разработчика для другого компьютера. Последнее, по сути, является эквивалентом автономного установщика, что очень удобно, если в будущем вы захотите установить пакет в других системах.

    Рисунок 1: Выбор типа установки

    В следующем окне вам необходимо снять флажки со всех пунктов кроме «Debugging Tools for Windows» и нажать на кнопку «Download».

    Как только установщик закончит свою работу, зайдите в директорию, куда загрузился пакет (по умолчанию это c:\Users\Username\Downloads\Windows Kits\8.1\StandaloneSDK) и пройдите процедуру установки.

    Установка WinDBG в Windows 7 и более ранних версиях

    Для Windows 7 и более ранних версий WinDBG входит в состав пакета «Debugging Tools for Windows», который включен в состав Windows SDK и.Net Framework . От вас потребуется загрузить инсталлятор, а затем в процессе установки выбрать «Debugging Tools for Windows».

    Во время установки я выбираю опцию «Debugging Tools» в разделе «Redistributable Packages», чтобы создать автономный инсталлятор для облегчения последующих установок.

    Рисунок 2: Выбор опций установки для создания автономного инсталлятора

    По завершению установки, у вас должны появиться инсталляторы WinDBG для различных платформ (в директории c:\Program Files\Microsoft SDKs\Windows\v7.1\Redist\Debugging Tools for Windows\).

    Рисунок 3: Папка с инсталляторами WinDBG для различных платформ

    Интерфейс WinDBG

    Рисунок 4: Внешний вид WinDBG

    Как только вы впервые увидите внешний вид WinDGB, то поймете, что отладчик пугающе прост. Большинство функций WinDBG узнаются во время отладки процесса. Вместо того чтобы тратить время на описание интерфейса, в последующих разделах мы рассмотрим только самые важные моменты.

    Самое основное, что вам необходимо знать об интерфейсе отладчика, - командное окно, которое состоит из двух областей. Первая область: окно, где выводится результат выполнения команд. Вторая область: небольшое текстовое поле для ввода команд.

    Рисунок 5: Командное окно WinDBG

    Символы

    В большинстве случаев WinDBG не требует особых настроек и корректно работает прямо «из коробки». Но одну важную вещь, которую необходимо настроить, - это символы . Символы – это файлы, которые генерируются вместе с исполняемым файлом во время компиляции программы и содержат отладочную информацию (функции и имена переменных). Отладочная информация позволяет исследовать функциональность приложения во время отладки или дизассемблирования. Многие компоненты Microsoft компилируются вместе с символами, которые распространяются через Microsoft Symbol Server. С остальными исполняемыми файлами все не так радужно, - очень редко файлы с отладочной информацией идут в комплекте с приложением. В большинстве случаев компании ограничивают доступ к подобной информации.

    Чтобы настроить WinDBG на использование Microsoft Symbol Server зайдите в раздел File:Symbol File Path и установите путь SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols. Конечно, немного странно, что звездочки используются в качестве разделителя. После того, как вы настроите Microsoft Symbol Server, символы загрузятся в папку C:\Symbols.

    Рисунок 6: Настройка Microsoft Symbol Server

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

    SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder

    Добавление символов во время отладки

    Если вам нужно импортировать символы во время отладки, то можно сделать это при помощи.sympath (окно для ввода команд появится, когда вы подцепитесь к процессу). К примеру, чтобы добавить папку c:\SomeOtherSymbolFolder, введите следующую команду:

    0:025> .sympath+ c:\SomeOtherSymbolFolder
    Symbol search path is: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder
    Expanded Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\someothersymbolfolder

    Будет не лишним выполнить перезагрузку символов после добавления или изменения путей:

    0:025> .reload
    Reloading current modules
    ................................................................
    ...............................................

    Проверка загруженных символов

    Чтобы увидеть, для каких модулей загружены символы, вы можете воспользоваться командой x*!. Хотя WinDBG загружает символы только по мере надобности, команда x*! покажет символы, которые могут быть загружены. Можно принудительно загрузить символы при помощи команды ld * (на это может уйти некоторое время, и вы можете остановить этот процесс, зайдя в Debug:Break).

    Теперь мы можем увидеть символы для каждого модуля.

    Рисунок 8: Перечень символов

    Отладка локального процесса

    При отладке локального процесса у вас есть два пути:

    1. Подцепиться к уже запущенному процессу.
    2. Запустить процесс через WinDBG.

    У каждого способа есть свои преимущества и недостатки. Если, допустим, вы запустили программу через WinDBG, то вам доступны некоторые специальные отладочные опции (например, отладка кучи), которые могут привести к краху приложения. С другой стороны, существуют также и программы, которые аварийно заканчиваются свою работу, когда вы цепляете к ним отладчик. Некоторые приложения (в особенности, вредоносы) во время запуска проверяют присутствие отладчика в системе и, соответственно, в этом случае имеет смысл цепляться к уже запущенному процессу. Иногда происходит отладка службы под управлением ОС Windows, которая устанавливает некоторые параметры во время запуска, так что для упрощения процесса отладки, также лучше подцепляться к запущенному процессу, а не запускать службу через отладчик. Некоторые люди утверждают, что запуск процесса через отладчик серьезно сказывается на производительности. Короче говоря, попробуйте и то и другое и выберите то, что подходит вам лучше всего. Если вы по каким-то причинам предпочитаете какой-то конкретный способ, поделитесь своими соображениями в комментариях!

    Запуск процесса

    Если вы отлаживаете отдельное приложение, которое запущено локально и не работает с сетью, возможно, вы захотите запустить его через WinDBG. Однако это не означает, что вы не можете подцепиться к уже запущенному процессу. Выбирайте наиболее удобный для вас способ.

    Запустить процесс не составляет труда. Зайдите в «File:Open Executable» и выберите тот исполняемый файл, который хотите отладить. Вы также можете указать аргументы или установить стартовую директорию:

    Рисунок 9: Выбор исполняемого файла для отладки

    Подключение к процессу

    Подключение к уже запущенному процессу также не составляет особого труда. Однако следует обратить внимание на то, что в некоторых случаях может потребоваться время для того, чтобы найти именно тот процесс, который вы хотите отладить. К примеру, некоторые браузеры создают один родительский процесс, а затем еще несколько процессов для каждой вкладки. Таким образом, в зависимости от крэш-дампа, который вы отлаживаете, возможно, вы захотите подцепиться не к родительскому процессу, а к процессу, связанному с вкладкой.

    Чтобы подцепиться к уже запущенному процессу зайдите в «File:Attach to a Process», а затем выберите PID или имя процесса. Помните о том, что вам необходимо иметь соответствующие права, чтобы подцепиться к процессу.

    Рисунок 10: Выбор процесса, к которому нужно подцепиться

    Если после подключения, приложения приостановило свою работу, вы можете использовать режим «Noninvaise», поставив соответствующий флажок.

    Отладка удаленного процесса

    Возможно, иногда вам будет требоваться отладка процесса на удаленной системе. Было бы намного более удобно решать эту задачу при помощи локального отладчика, вместо использования виртуальной машины или RDP. Или, быть может, вы отлаживаете процесс LoginUI.exe, который доступен только в случае, когда система заблокирована. В подобных ситуациях вы можете использовать локальную версию WinDBG и удаленно подключаться к процессам. Для решения этих задач существует два наиболее распространенных способа.

    Существующие отладочные сессии

    Если вы уже начали локальную отладку программы (посредством подключения или запуска процесса через WinDBG), то можете ввести определенную команду, и WinDBG запустит «слушатель» (listener), к которому сможет подключиться удаленный отладчик. Для этого используйте команду.server:

    Server tcp:port=5005

    После запуска вышеупомянутой команды вы можете увидеть такое предупреждение:

    Рисунок 11: Сообщение с предупреждением, которое может возникнуть после запуска команды по создания «слушателя»

    Затем WinDBG сообщит, что сервер запущен:

    0:005> .server tcp:port=5005
    0: -remote tcp:Port=5005,Server=USER-PC

    Теперь вы может подключиться с удаленного хоста к уже существующей отладочной сессии, зайдя в «File:Connect to a Remote Session» и введя в текстовое поле примерно следующее: tcp:Port=5005,Server=192.168.127.138

    Рисунок 12: Удаленное подключение к отладочной сессии

    После подключения вы получите подтверждение на удаленном клиенте:


    Server started. Client can connect with any of these command lines
    0: -remote tcp:Port=5005,Server=USER-PC
    MACHINENAME\User (tcp 192.168.127.138:13334) connected at Mon Dec 16 09:03:03 2013

    и сообщение в локальной версии отладчика:

    MACHINENAME\User (tcp 192.168.127.138:13334) connected at Mon Dec 16 09:03:03 2013

    Создание удаленного сервера

    Вы также можете создать отдельный сервер с WinDBG, удаленно подключаться к нему и выбирать процесс для отладки. Это можно сделать, используя файл dbgsrv.exe там, где вы планируете отлаживать процессы. Для запуска подобного сервера запустите следующую команду:

    dbgsrv.exe -t tcp:port=5005

    Рисунок 13: Запуск удаленного сервера

    И опять же вы можете получить предупреждение о безопасности, которое вам следует принять:

    Рисунок 14: Сообщение безопасности, которое может возникнуть во время запуска отладочного сервера

    К серверу отладки вы можете подключиться, если зайдете в файл «File: Connect to Remote Stub» и введете в текстовое поле следующую строку: tcp:Port=5005,Server=192.168.127.138

    Рисунок 15: Подключение к отладочному серверу

    После подключения вы не получите каких-то сигналов о том, что вы подключились, однако если вы зайдете в «File:Attach to a Process», то увидите перечень процессов отладочного сервера (там, где запущен dbgsrv.exe). Теперь вы можете подцепляться к процессу, как если бы делали это локально.

    Система помощи

    Система помощи в WinDBG – великолепна. Помимо изучения чего-то нового, вы должны уметь получать справочную информацию о какой-либо команде. Используйте команду.hh для доступа к справке WinDBG:

    Вы также можете получить справочную информацию по определенной команде. Например, чтобы получить помощь по команде.reload, используйте следующую команду:

    windbg> .hh .reload

    Или просто зайдите в раздел «Help:Contents».

    Модули

    Во время работы программы импортируются различные модули, обеспечивающие функциональность приложения. Следовательно, если вы будете знать, какие модули импортированы приложением, то сможете лучше понять алгоритм его работы. Во многих случаях, вы будете отлаживать конкретный модуль, загруженный программой, а не сам исполняемый файл.

    После подключения к процессу WinDBG автоматически отобразит загруженные модули. К примеру, ниже показаны модули, после того, как я подключился к calc.exe:

    Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
    Copyright (c) Microsoft Corporation. All rights reserved.

    *** wait with pending attach
    Symbol search path is: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
    Executable search path is:
    ModLoad: 00a70000 00b30000 C:\Windows\system32\calc.exe
    ModLoad: 77630000 7776c000 C:\Windows\SYSTEM32\ntdll.dll
    ModLoad: 77550000 77624000 C:\Windows\system32\kernel32.dll
    ModLoad: 75920000 7596a000 C:\Windows\system32\KERNELBASE.dll
    ModLoad: 76410000 77059000 C:\Windows\system32\SHELL32.dll
    ModLoad: 77240000 772ec000 C:\Windows\system32\msvcrt.dll
    ModLoad: 76300000 76357000 C:\Windows\system32\SHLWAPI.dll
    ModLoad: 75cd0000 75d1e000 C:\Windows\system32\GDI32.dll
    ModLoad: 75fa0000 76069000 C:\Windows\system32\USER32.dll
    ModLoad: 777b0000 777ba000 C:\Windows\system32\LPK.dll
    ModLoad: 774b0000 7754d000 C:\Windows\system32\USP10.dll
    ModLoad: 73110000 732a0000 C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_
    6595b64144ccf1df_1.1.7600.16385_none_72fc7cbf861225ca\gdiplus.dll
    ModLoad: 75a80000 75bdc000 C:\Windows\system32\ole32.dll
    ModLoad: 76360000 76401000 C:\Windows\system32\RPCRT4.dll
    ModLoad: 777c0000 77860000 C:\Windows\system32\ADVAPI32.dll
    ModLoad: 75be0000 75bf9000 C:\Windows\SYSTEM32\sechost.dll
    ModLoad: 76270000 762ff000 C:\Windows\system32\OLEAUT32.dll
    ModLoad: 74590000 745d0000 C:\Windows\system32\UxTheme.dll
    ModLoad: 74710000 748ae000 C:\Windows\WinSxS\x86_microsoft.windows.common-
    ModLoad: 703d0000 70402000 C:\Windows\system32\WINMM.dll
    ModLoad: 74c80000 74c89000 C:\Windows\system32\VERSION.dll
    ModLoad: 77770000 7778f000 C:\Windows\system32\IMM32.DLL
    ModLoad: 75c00000 75ccc000 C:\Windows\system32\MSCTF.dll
    ModLoad: 74130000 7422b000 C:\Windows\system32\WindowsCodecs.dll
    ModLoad: 74260000 74273000 C:\Windows\system32\dwmapi.dll
    ModLoad: 756d0000 756dc000 C:\Windows\system32\CRYPTBASE.dll
    ModLoad: 75e60000 75ee3000 C:\Windows\system32\CLBCatQ.DLL
    ModLoad: 6ef10000 6ef4c000 C:\Windows\system32\oleacc.dll

    Позже в процессе отладки вы можете вновь вывести этот список при помощи команды lmf:

    0:005> lmf
    start end module name
    00a70000 00b30000 calc C:\Windows\system32\calc.exe
    6ef10000 6ef4c000 oleacc C:\Windows\system32\oleacc.dll
    703d0000 70402000 WINMM C:\Windows\system32\WINMM.dll
    73110000 732a0000 gdiplus C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_
    1.1.7600.16385_none_72fc7cbf861225ca\gdiplus.dll
    74130000 7422b000 WindowsCodecs C:\Windows\system32\WindowsCodecs.dll
    74260000 74273000 dwmapi C:\Windows\system32\dwmapi.dll
    74590000 745d0000 UxTheme C:\Windows\system32\UxTheme.dll
    74710000 748ae000 COMCTL32 C:\Windows\WinSxS\x86_microsoft.windows.common-
    controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc\COMCTL32.dll
    74c80000 74c89000 VERSION C:\Windows\system32\VERSION.dll
    756d0000 756dc000 CRYPTBASE C:\Windows\system32\CRYPTBASE.dll
    75920000 7596a000 KERNELBASE C:\Windows\system32\KERNELBASE.dll
    75a80000 75bdc000 ole32 C:\Windows\system32\ole32.dll
    75be0000 75bf9000 sechost C:\Windows\SYSTEM32\sechost.dll
    75c00000 75ccc000 MSCTF C:\Windows\system32\MSCTF.dll
    75cd0000 75d1e000 GDI32 C:\Windows\system32\GDI32.dll
    75e60000 75ee3000 CLBCatQ C:\Windows\system32\CLBCatQ.DLL
    75fa0000 76069000 USER32 C:\Windows\system32\USER32.dll
    76270000 762ff000 OLEAUT32 C:\Windows\system32\OLEAUT32.dll
    76300000 76357000 SHLWAPI C:\Windows\system32\SHLWAPI.dll
    76360000 76401000 RPCRT4 C:\Windows\system32\RPCRT4.dll
    76410000 77059000 SHELL32 C:\Windows\system32\SHELL32.dll
    77240000 772ec000 msvcrt C:\Windows\system32\msvcrt.dll
    774b0000 7754d000 USP10 C:\Windows\system32\USP10.dll
    77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll
    77630000 7776c000 ntdll C:\Windows\SYSTEM32\ntdll.dll
    77770000 7778f000 IMM32 C:\Windows\system32\IMM32.DLL
    777b0000 777ba000 LPK C:\Windows\system32\LPK.dll
    777c0000 77860000 ADVAPI32 C:\Windows\system32\ADVAPI32.dll

    Также вы можете узнать адрес загрузки для конкретного модуля при помощи команды «lmf m»:

    0:005> lmf m kernel32
    start end module name
    77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll

    Вы также можете получить информацию о заголовке (image header) конкретного модуля при помощи расширения!dh (восклицательный знак указывает на расширение):

    0:005> !dh kernel32

    File Type: DLL
    FILE HEADER VALUES
    14C machine (i386)
    4 number of sections
    4A5BDAAD time date stamp Mon Jul 13 21:09:01 2009

    0 file pointer to symbol table
    0 number of symbols
    E0 size of optional header
    2102 characteristics
    Executable
    32 bit word machine
    DLL

    OPTIONAL HEADER VALUES
    10B magic #
    9.00 linker version
    C4600 size of code
    C800 size of initialized data
    0 size of uninitialized data
    510C5 address of entry point
    1000 base of code
    ----- new -----
    77550000 image base
    1000 section alignment
    200 file alignment
    3 subsystem (Windows CUI)
    6.01 operating system version
    6.01 image version
    6.01 subsystem version
    D4000 size of image
    800 size of headers
    D5597 checksum
    00040000 size of stack reserve
    00001000 size of stack commit
    00100000 size of heap reserve
    00001000 size of heap commit
    140 DLL characteristics
    Dynamic base
    NX compatible
    B4DA8 [ A915] address of Export Directory
    BF6C0 [ 1F4] address of Import Directory
    C7000 [ 520] address of Resource Directory
    0 [ 0] address of Exception Directory
    0 [ 0] address of Security Directory
    C8000 [ B098] address of Base Relocation Directory
    C5460 [ 38] address of Debug Directory
    0 [ 0] address of Description Directory
    0 [ 0] address of Special Directory
    0 [ 0] address of Thread Storage Directory
    816B8 [ 40] address of Load Configuration Directory
    278 [ 408] address of Bound Import Directory
    1000 [ DE8] address of Import Address Table Directory
    0 [ 0] address of Delay Import Directory
    0 [ 0] address of COR20 Header Directory
    0 [ 0] address of Reserved Directory

    SECTION HEADER #1
    .text name
    C44C1 virtual size
    1000 virtual address
    C4600 size of raw data
    800 file pointer to raw data

    0 number of relocations
    0 number of line numbers
    60000020 flags
    Code
    (no align specified)
    Execute Read

    Debug Directories(2)
    Type Size Address Pointer
    cv 25 c549c c4c9c Format: RSDS, guid, 2, kernel32.pdb
    (10) 4 c5498 c4c98

    SECTION HEADER #2
    .data name
    FEC virtual size
    C6000 virtual address
    E00 size of raw data
    C4E00 file pointer to raw data
    0 file pointer to relocation table
    0 file pointer to line numbers
    0 number of relocations
    0 number of line numbers
    C0000040 flags
    Initialized Data
    (no align specified)
    Read Write

    SECTION HEADER #3
    .rsrc name
    520 virtual size
    C7000 virtual address
    600 size of raw data
    C5C00 file pointer to raw data
    0 file pointer to relocation table
    0 file pointer to line numbers
    0 number of relocations
    0 number of line numbers
    40000040 flags
    Initialized Data
    (no align specified)
    Read Only

    SECTION HEADER #4
    .reloc name
    B098 virtual size
    C8000 virtual address
    B200 size of raw data
    C6200 file pointer to raw data
    0 file pointer to relocation table
    0 file pointer to line numbers
    0 number of relocations
    0 number of line numbers
    42000040 flags
    Initialized Data
    Discardable
    (no align specified)
    Read Only

    Сообщения и исключения

    После подключения к процессу вначале отображается список модулей, а затем могут появиться другие сообщения. Например, когда мы цепляемся к calc.exe, WinDBG автоматически устанавливает точку останова (которая является просто маркером, используемым для остановки приложения). Информация о точке останова выводится на экран:

    (da8.b44): Break instruction exception - code 80000003 (first chance)

    Конкретно это сообщение является исключением, а именно first-chance исключением. По сути, исключение – это особое состояние, возникающее во время выполнения программы. First-chance исключение означает, что программа остановилась сразу же после появления исключения. Second-chance исключение означает, что после возникновения исключения будут выполнены некоторые операции, а потом программа остановит свою работу.

    Регистры

    После отображения сообщений и исключений отладчик выводит состояние регистров процессора. Регистры – это специальные переменные внутри процессора, которые хранят небольшие куски информации или следят за состоянием чего-либо в памяти. Процессор может обрабатывать информацию в этих регистрах очень быстро. Это намного быстрее, чем каждый раз получать информацию по шине из RAM.

    После подключения к calc.exe WinDBG автоматически отображает информацию о следующих регистрах:

    eax=7ffd9000 ebx=00000000 ecx=00000000 edx=776cd23d esi=00000000 edi=00000000
    cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246

    Позже можно продублировать эту информацию еще раз при помощи команды r:

    0:005> r
    eax=7ffd9000 ebx=00000000 ecx=00000000 edx=776cd23d esi=00000000 edi=00000000
    eip=77663540 esp=02affd9c ebp=02affdc8 iopl=0 nv up ei pl zr na pe nc
    cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
    ntdll!DbgBreakPoint:
    77663540 cc int 3

    Если мы хотим получить значение конкретного регистра, то можем выполнить такую команду:

    0:005> r eax
    eax=7ffd9000

    Информацию одновременно из нескольких регистров можно получить так:

    0:005> r eax,ebp
    eax=7ffd9000 ebp=02affdc8

    Указатель на инструкцию

    Последняя команда посвящена запускаемым инструкциям. Здесь информация также выводится на экран, как и в случае с командой r, того, что содержит регистр EIP. EIP – это регистр, содержащий местонахождение следующей инструкции, которую должен выполнить процессор. То, что отображает WinDBG, – эквивалент команды u eip L1, после выполнения которой WinDBG идет по адресу, указанному в регистре EIP, преобразует этот участок в ассемблерный код и отображает его на экране.

    ntdll!DbgBreakPoint:
    77663540 cc int 3

    Оставайтесь на связи

    В следующих статьях мы рассмотрим, как использовать WinDBG в боевых условиях: точки останова, пошаговую отладку и просмотр памяти. Не переключайтесь! J.

    on June 22, 2010

    Previously Windbg was available separately to download. But for the latest versions, Microsoft keeps it as part of Windows SDK. Please find the download links below.

    Windows 10

    The latest version of Windbg for Windows 7 can be downloaded from the link https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

    Windows 7

    Download installers from the above links. Note that this does not download the whole SDK, it’s just an installer. Once you run the file, you can select which tools you would like to be downloaded. If you are interested only in Windbg, you can exclude everything else and only select ‘Debugging tools’ under ‘Common Utilities’

    The above package installs windbg 6.12 version. If you want to quick install windbg, you can go for older version(6.11) which can be downloaded from
    the link given at the end of this post.

    Once you do the installation, you can find the program in Start Menu -> All Programs -> Debugging Tools for Windows -> Windbg