Debugging tools for windows використання. Установка Debugging Tools for Windows. Повідомлення і виключення

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 -\u003e All Programs -\u003e Debugging Tools for Windows -\u003e Windbg

Для виявлення причин виникнення синіх екранів (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.

Знайомство з 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\u003e .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\u003e .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 \u003d 5005

Після запуску вищезгаданої команди ви можете побачити таке попередження:

Малюнок 11: Повідомлення з попередженням, яке може виникнути після запуску команди по створення «слухача»

Потім WinDBG повідомить, що сервер запущений:

0: 005\u003e .server tcp: port \u003d 5005
0: -remote tcp: Port \u003d 5005, Server \u003d USER-PC

Тепер ви може підключитися з віддаленого хоста до вже існуючої отладочной сесії, зайшовши в «File: Connect to a Remote Session» і ввівши в текстове поле приблизно наступне: tcp: Port \u003d 5005, Server \u003d 192.168.127.138

Малюнок 12: Віддалене підключення до отладочной сесії

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


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

і повідомлення в локальній версії відладчика:

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

Створення віддаленого сервера

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

dbgsrv.exe -t tcp: port \u003d 5005

Малюнок 13: Запуск віддаленого сервера

І знову ж таки ви можете отримати попередження про безпеку, яке вам слід прийняти:

Малюнок 14: Повідомлення безпеки, що може виникнути під час запуску отладочного сервера

До сервера налагодження ви можете підключитися, якщо зайдете в файл «File: Connect to Remote Stub» і введете в текстове поле наступний рядок: tcp: Port \u003d 5005, Server \u003d 192.168.127.138

Малюнок 15: Підключення до Отладочная сервера

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

система допомоги

Система допомоги в WinDBG - чудова. Крім вивчення чогось нового, ви повинні вміти отримувати довідкову інформацію про будь-якої команди. Використовуйте команду.hh відкрити посібник WinDBG:

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

windbg\u003e .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\u003e 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\u003e lmf m kernel32
start end module name
77550000 77624000 kernel32 C: \\ Windows \\ system32 \\ kernel32.dll

Ви також можете отримати інформацію про заголовку (image header) конкретного модуля за допомогою розширення! Dh (знак оклику вказує на розширення):

0: 005\u003e! 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 \u003d 7ffd9000 ebx \u003d 00000000 ecx \u003d 00000000 edx \u003d 776cd23d esi \u003d 00000000 edi \u003d 00000000
cs \u003d 001b ss \u003d 0023 ds \u003d 0023 es \u003d 0023 fs \u003d 003b gs \u003d 0000 efl \u003d 00000246

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

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

Якщо ми хочемо отримати значення конкретного регістру, то можемо виконати таку команду:

0: 005\u003e r eax
eax \u003d 7ffd9000

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

0: 005\u003e r eax, ebp
eax \u003d 7ffd9000 ebp \u003d 02affdc8

Покажчик на інструкцію

Остання команда присвячена запускаються інструкцій. Тут інформація також виводиться на екран, як і у випадку з командою r, того, що містить регістр EIP. EIP - це регістр, що містить місцезнаходження наступної інструкції, яку повинен виконати процесор. Те, що відображає WinDBG, - еквівалент команди u eip L1, після виконання якої WinDBG йде за адресою, вказаною в регістрі EIP, перетворює цю ділянку в асемблерний код і відображає його на екрані.

ntdll! DbgBreakPoint:
77663540 cc int 3

Залишайтеся на зв'язку

У наступних статтях ми розглянемо, як використовувати WinDBG в бойових умовах: точки зупину, покрокову налагодження та перегляд пам'яті. Не перемикайтеся! J.

Для виявлення причин виникнення синіх екранів (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.