مقدمه ای بر WinDBG - قسمت 1

الکساندر آنتیپوف

WinDBG یک دیباگر عالی است. ممکن است به طور پیش فرض رابط کاربری چندان کاربرپسندی نداشته باشد و پس زمینه مشکی نداشته باشد، اما یکی از قوی ترین و پایدارترین دیباگرهای ویندوز در حال حاضر است. در این مقاله، من شما را با اصول اولیه WinDBG آشنا می کنم تا بتوانید با آن شروع کنید.


WinDBG یک دیباگر عالی است. ممکن است به طور پیش فرض رابط کاربری چندان کاربرپسندی نداشته باشد و پس زمینه مشکی نداشته باشد، اما یکی از قوی ترین و پایدارترین دیباگرهای ویندوز در حال حاضر است. در این مقاله، من شما را با اصول اولیه WinDBG آشنا می کنم تا بتوانید با آن شروع کنید.

این اولین مقاله از مجموعه در مورد WinDBG است. لیست تمام مقالات موجود در این مجموعه:

  • قسمت 1 - نصب، رابط، نمادها، اشکال زدایی از راه دور/محلی، سیستم راهنما، ماژول ها، رجیسترها.
  • بخش 2 - نقاط شکست.
  • قسمت 3 - بازرسی حافظه، اشکال زدایی گام به گام برنامه، نکات و ترفندها.

در این مقاله به نصب و اتصال به یک فرآیند می پردازیم و در موارد بعدی نقاط شکست، گام برداشتن و بازرسی حافظه را پوشش خواهیم داد.

نصب WinDBG

در مقایسه با ویندوز 7، روند نصب WinDBG در ویندوز 8 کمی تغییر کرده است. در این بخش، به نصب یک دیباگر برای هر دو خواهیم پرداخت سیستم های عامل.

نصب WinDBG در ویندوز 8

در ویندوز 8، WinDBG در کیت درایور ویندوز (WDK) گنجانده شده است. می توانید نصب کنید استودیوی تصویریو WDK یا Debugging را نصب کنید ابزار برایویندوز 8.1" که شامل WinDBG است.

نصب کننده از شما می پرسد که آیا می خواهید WinDBG را به صورت محلی نصب کنید یا کل بسته توسعه را برای دستگاه دیگری دانلود کنید. مورد دوم اساساً معادل یک نصب کننده مستقل است که اگر بخواهید در آینده بسته را روی سیستم های دیگر نصب کنید بسیار مفید است.

شکل 1: انتخاب نوع نصب

در پنجره بعدی باید تیک همه موارد به جز «ابزارهای اشکال زدایی برای ویندوز» را بردارید و روی دکمه «دانلود» کلیک کنید.

هنگامی که نصب کننده کار خود را کامل کرد، به دایرکتوری که بسته در آن دانلود شده است بروید (به طور پیش فرض c:\Users\Username\Downloads\Windows Kits\8.1\StandaloneSDK است) و مراحل نصب را طی کنید.

نصب WinDBG در ویندوز 7 و نسخه های قبلی

برای ویندوز 7 و نسخه های قبلی، WinDBG بخشی از بسته "ابزارهای اشکال زدایی برای ویندوز" است که همراه با SDK ویندوز و چارچوب Net. از شما خواسته می شود که نصب کننده را دانلود کنید، و سپس "ابزارهای اشکال زدایی برای ویندوز" را در طول مراحل نصب انتخاب کنید.

در حین نصب، گزینه "ابزارهای اشکال زدایی" را در زیر "بسته های قابل توزیع مجدد" انتخاب می کنم تا یک نصب کننده مستقل برای تسهیل نصب های بعدی ایجاد کنم.

شکل 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 به تنظیمات خاصی نیاز ندارد و به درستی کار می کند. اما یکی چیز مهم، که باید پیکربندی شود، کاراکترها هستند. نمادها فایل هایی هستند که همراه با فایل اجرایی در طول کامپایل برنامه تولید می شوند و حاوی اطلاعات اشکال زدایی (توابع و نام متغیرها) هستند. اطلاعات اشکال زدایی به شما امکان می دهد در حین اشکال زدایی یا جداسازی، عملکرد یک برنامه را بررسی کنید. بسیاری از اجزای مایکروسافت با نمادهایی که از طریق سرور نماد مایکروسافت توزیع می شوند، کامپایل می شوند. با بقیه فایل‌های اجرایی، همه چیز چندان خوشگل نیست - به ندرت فایل‌هایی با اطلاعات اشکال‌زدایی با برنامه همراه می‌شوند. در بیشتر موارد، شرکت ها دسترسی به چنین اطلاعاتی را محدود می کنند.

برای پیکربندی WinDBG برای استفاده از Microsoft Symbol Server به بخش File:Symbol File Path بروید و مسیر را روی SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols قرار دهید. البته کمی عجیب است که از ستاره به عنوان جداکننده استفاده می شود. پس از راه اندازی مایکروسافت Symbol Server، نمادها در پوشه C:\Symbols دانلود می شوند.

شکل 6: راه اندازی سرور نماد مایکروسافت

WinDBG به صورت خودکار نمادهای فایل های باینری را در صورت نیاز بارگذاری می کند. همچنین می توانید پوشه نمادهای خود را مانند موارد زیر اضافه کنید:

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

اضافه کردن نمادها هنگام اشکال زدایی

اگر در حین اشکال‌زدایی نیاز به وارد کردن نمادها دارید، می‌توانید این کار را با .sympath انجام دهید (پنجره فرمان وقتی به فرآیند متصل می‌شوید ظاهر می‌شود). به عنوان مثال، برای افزودن پوشه c:\SomeOtherSymbolFolder، دستور زیر را وارد کنید:

0:025> .sympath+ c:\SomeOtherSymbolFolder
مسیر جستجوی نماد عبارت است از: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder
مسیر جستجوی نماد گسترش یافته عبارت است از: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\someothersymbolfolder

پس از افزودن یا تغییر مسیرها، ایده خوبی است که نمادها را دوباره بارگیری کنید:

0:025> بارگذاری مجدد
بارگذاری مجدد ماژول های فعلی
................................................................
...............................................

بررسی نمادهای بارگذاری شده

برای اینکه ببینید کدام ماژول ها دارای نمادها هستند، می توانید از دستور x*! استفاده کنید. اگرچه WinDBG فقط نمادها را در صورت نیاز بارگذاری می کند، x*! نمادهایی را نشان می دهد که می توانند بارگذاری شوند. می توانید با استفاده از دستور ld * بارگذاری نمادها را مجبور کنید (ممکن است مدتی طول بکشد و می توانید با رفتن به Debug:Break این فرآیند را متوقف کنید).

اکنون می توانیم نمادهای هر ماژول را ببینیم.

شکل 8: فهرست نمادها

اشکال زدایی یک فرآیند محلی

هنگام اشکال زدایی یک فرآیند محلی، دو گزینه دارید:

  1. به یک فرآیند از قبل در حال اجرا پیوست کنید.
  2. فرآیند راه اندازی از طریق WinDBG.

هر روشی مزایا و معایب خاص خود را دارد. اگر مثلاً برنامه را از طریق WinDBG اجرا کنید، آنگاه چند گزینه اشکال زدایی ویژه در دسترس دارید (مثلاً اشکال زدایی پشته) که می تواند باعث از کار افتادن برنامه شود. از سوی دیگر، برنامه هایی نیز وجود دارند که وقتی یک دیباگر را به آنها وصل می کنید، از کار می افتند. برخی از برنامه ها (به ویژه بدافزار) وجود یک اشکال زدا را در سیستم در هنگام راه اندازی بررسی می کنند و بر این اساس، در این مورد منطقی است که به یک فرآیند در حال اجرا چسبیده باشید. گاهی اوقات یک سرویس ویندوز اشکال زدایی وجود دارد که برخی از پارامترها را در زمان راه اندازی تنظیم می کند، بنابراین برای ساده کردن فرآیند اشکال زدایی، بهتر است به جای شروع سرویس از طریق یک دیباگر، به یک فرآیند در حال اجرا متصل شوید. برخی افراد ادعا می کنند که اجرای یک فرآیند از طریق دیباگر تأثیر جدی بر عملکرد دارد. به طور خلاصه، هر دو را امتحان کنید و بهترین را انتخاب کنید. اگر به دلایلی روش خاصی را ترجیح می دهید، نظرات خود را در نظرات به اشتراک بگذارید!

شروع یک فرآیند

اگر یک برنامه مستقل را که به صورت محلی اجرا می شود و به شبکه متصل نیست، اشکال زدایی می کنید، ممکن است بخواهید آن را از طریق WinDBG اجرا کنید. با این حال، این بدان معنا نیست که شما نمی توانید به یک فرآیند در حال اجرا متصل شوید. راحت ترین راه را برای خود انتخاب کنید.

شروع فرآیند کار سختی نیست. به "File:Open Executable" بروید و فایل اجرایی را که می خواهید اشکال زدایی کنید انتخاب کنید. همچنین می‌توانید آرگومان‌هایی ارائه کنید یا دایرکتوری شروع را تنظیم کنید:

شکل 9: انتخاب یک فایل اجرایی برای اشکال زدایی

اتصال فرآیند

اتصال به یک فرآیند از قبل در حال اجرا نیز دشوار نیست. با این حال، لطفاً توجه داشته باشید که در برخی موارد ممکن است یافتن فرآیند دقیقی که می‌خواهید اشکال‌زدایی کنید، زمان ببرد. به عنوان مثال، برخی از مرورگرها یک فرآیند والد و سپس چندین پردازش دیگر را برای هر تب ایجاد می کنند. بنابراین، بسته به محل خرابی که در حال رفع اشکال هستید، ممکن است بخواهید نه به فرآیند والد، بلکه به فرآیند مرتبط با برگه متصل شوید.

برای پیوست کردن به یک فرآیند از قبل در حال اجرا، به "File:Attach to a Process" بروید و سپس PID یا نام فرآیند را انتخاب کنید. به یاد داشته باشید که برای پیوستن به این فرآیند باید حقوق مناسبی داشته باشید.

شکل 10: انتخاب فرآیندی برای قلاب کردن

اگر پس از اتصال، برنامه کار خود را به حالت تعلیق درآورده است، می توانید با علامت زدن کادر مناسب از حالت "Noninvaise" استفاده کنید.

اشکال زدایی یک فرآیند از راه دور

گاهی اوقات ممکن است نیاز به اشکال زدایی یک فرآیند در یک سیستم راه دور داشته باشید. به جای استفاده از ماشین مجازی یا RDP، رسیدگی به این کار با یک دیباگر محلی بسیار راحت تر خواهد بود. یا شاید شما در حال اشکال زدایی فرآیند LoginUI.exe هستید که فقط زمانی در دسترس است که سیستم قفل باشد. در شرایطی مانند این، می توانید از نسخه محلی WinDBG استفاده کنید و از راه دور به پردازش ها متصل شوید. برای حل این مشکلات دو روش رایج وجود دارد.

جلسات اشکال زدایی موجود

اگر قبلاً اشکال زدایی برنامه را به صورت محلی آغاز کرده اید (با پیوست کردن یا راه اندازی یک فرآیند از طریق WinDBG)، می توانید یک دستور خاص را وارد کنید و WinDBG یک "lister" (شنونده) را شروع می کند که اشکال زدا از راه دور می تواند به آن متصل شود. برای این کار از دستور .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: اتصال از راه دوربه جلسه رفع اشکال

پس از اتصال، تأییدیه را در مشتری راه دور دریافت خواهید کرد:


سرور شروع شد کلاینت می تواند با هر یک از این خطوط فرمان ارتباط برقرار کند
0: -Remote tcp:Port=5005,Server=USER-PC
MACHINENAME\User (tcp 192.168.127.138:13334) در دوشنبه 16 دسامبر 09:03:03 2013 متصل شد

و پیام در نسخه محلیدیباگر:

MACHINENAME\User (tcp 192.168.127.138:13334) در دوشنبه 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 عالی است. علاوه بر یادگیری چیزهای جدید، باید بتوانید دریافت کنید اطلاعات پس زمینهدر مورد هر تیمی برای دسترسی به راهنمای WinDBG از دستور hh استفاده کنید:

همچنین می توانید اطلاعات کمکی برای یک دستور خاص دریافت کنید. به عنوان مثال، برای دریافت راهنمایی در مورد دستور .reload، از دستور زیر استفاده کنید:

windbg> .hh .بارگیری مجدد

یا فقط به بخش "Help: Contents" بروید.

ماژول ها

در حالی که برنامه در حال اجرا است، ماژول های مختلفی وارد می شوند که عملکرد برنامه را ارائه می دهند. بنابراین، اگر بدانید کدام ماژول ها توسط یک برنامه کاربردی وارد می شوند، می توانید نحوه عملکرد آن را بهتر درک کنید. در بسیاری از موارد، ماژول خاصی را که توسط برنامه بارگذاری شده است، اشکال زدایی می کنید، نه خود فایل اجرایی.

پس از اتصال به فرآیند، WinDBG به طور خودکار ماژول های بارگذاری شده را نمایش می دهد. به عنوان مثال، ماژول‌هایی که پس از اتصال به calc.exe در زیر آمده است:

Microsoft (R) Windows Debugger نسخه 6.12.0002.633 X86
حق چاپ (ج) شرکت مایکروسافت. تمامی حقوق محفوظ است.

*** با پیوست در انتظار صبر کنید
مسیر جستجوی نماد عبارت است از: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
مسیر جستجوی اجرایی:
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
نام ماژول پایان شروع
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 75cccc000 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 777ba000LPK C:\Windows\system32\LPK.dll
777c0000 77860000 ADVAPI32 C:\Windows\system32\ADVAPI32.dll

همچنین می توانید با استفاده از دستور "lmf m" آدرس دانلود یک ماژول خاص را پیدا کنید:

0:005> lmf m kernel32
نام ماژول پایان شروع
77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll

همچنین می توانید با استفاده از پسوند !dh اطلاعاتی درباره هدر تصویر یک ماژول خاص دریافت کنید (نقطه تعجب نشان دهنده یک پسوند است):

0:005> !dh kernel32

نوع فایل:DLL
مقادیر سرصفحه فایل
دستگاه 14C (i386)
4 تعداد بخش
مهر تاریخ 4A5BDAAD دوشنبه 13 ژوئیه 21:09:01 2009

0 نشانگر فایل به جدول نمادها
0 تعداد نمادها
اندازه E0 سربرگ اختیاری
2102 ویژگی
قابل اجرا
ماشین کلمه 32 بیتی
DLL

مقادیر هدر اختیاری
10B جادو #
نسخه پیوند دهنده 9.00
کد سایز C4600
اندازه C800 داده های اولیه
اندازه 0 داده های اولیه
آدرس نقطه ورودی 510C5
کد پایه 1000
----- جدید -----
77550000 imagebase
تراز 1000 بخش
تراز فایل 200
3 زیر سیستم (ویندوز CUI)
نسخه سیستم عامل 6.01
نسخه تصویر 6.01
نسخه زیرسیستم 6.01
تصویر سایز D4000
هدر سایز 800
جمع کنترلی D5597
00040000 اندازه ذخیره پشته
اندازه 00001000 پشته commit
00100000 اندازه ذخیره پشته
00001000 اندازه هپ متعهد
140 ویژگی DLL
پایه پویا
سازگار با NX
آدرس B4DA8 [A915] دایرکتوری صادرات
آدرس BF6C0 [ 1F4] دایرکتوری واردات
آدرس C7000 [ 520] دایرکتوری منابع
0 [ 0] آدرس دایرکتوری استثنا
0 [ 0] آدرس دایرکتوری امنیتی
آدرس C8000 [B098] دایرکتوری جابجایی پایگاه
آدرس C5460 [ 38] دایرکتوری اشکال زدایی
0 [ 0] آدرس دایرکتوری توضیحات
0 [ 0] آدرس دایرکتوری ویژه
0 [ 0] آدرس دایرکتوری ذخیره‌سازی موضوع
آدرس 816B8 [ 40] Load Configuration Directory
278 [ 408] آدرس دایرکتوری Bound Import
آدرس 1000 [DE8] فهرست راهنمای جدول آدرس ورودی
0 [ 0] آدرس دایرکتوری تاخیر واردات
0 [ 0] آدرس دایرکتوری هدر COR20
0 [ 0] آدرس دایرکتوری رزرو شده

سرفصل بخش شماره 1
نام متن
اندازه مجازی C44C1
1000 آدرس مجازی
اندازه C4600 داده های خام
نشانگر 800 فایل به داده های خام

0 تعداد جابه جایی
0 تعداد شماره خطوط
60000020 پرچم
کد
(هیچ تراز مشخص نشده است)
Read را اجرا کنید

دایرکتوری اشکال زدایی (2)
نشانگر اندازه آدرس را تایپ کنید
فرمت cv 25 c549c c4c9c: RSDS, guid, 2, kernel32.pdb
(10) 4 c5498 c4c98

سرفصل بخش شماره 2
نام داده
اندازه مجازی FEC
آدرس مجازی C6000
اندازه E00 داده های خام
نشانگر فایل C4E00 به داده های خام
0 نشانگر فایل به جدول جابجایی
0 نشانگر فایل به شماره خط
0 تعداد جابه جایی
0 تعداد شماره خطوط
پرچم های C0000040
داده های اولیه
(هیچ تراز مشخص نشده است)
بخوانید بنویسید

سربرگ بخش شماره 3
نام rsrc
سایز مجازی 520
آدرس مجازی C7000
اندازه 600 داده خام
نشانگر فایل C5C00 به داده های خام
0 نشانگر فایل به جدول جابجایی
0 نشانگر فایل به شماره خط
0 تعداد جابه جایی
0 تعداد شماره خطوط
40000040 پرچم
داده های اولیه
(هیچ تراز مشخص نشده است)
فقط خواندنی

سرفصل بخش شماره 4
.relocname
اندازه مجازی B098
آدرس مجازی C8000
اندازه B200 داده های خام
نشانگر فایل C6200 به داده های خام
0 نشانگر فایل به جدول جابجایی
0 نشانگر فایل به شماره خط
0 تعداد جابه جایی
0 تعداد شماره خطوط
42000040 پرچم
داده های اولیه
قابل حذف
(هیچ تراز مشخص نشده است)
فقط خواندنی

پیام ها و استثناها

پس از پیوست شدن به یک فرآیند، ابتدا لیستی از ماژول ها نمایش داده می شود و سپس پیام های دیگری ممکن است ظاهر شوند. به عنوان مثال، هنگامی که به calc.exe متصل می‌شویم، WinDBG به طور خودکار یک نقطه شکست (که فقط یک نشانگر برای توقف برنامه است) تعیین می‌کند. اطلاعات نقطه شکست روی صفحه نمایش داده می شود:

(da8.b44): استثناء دستورالعمل شکست - کد 80000003 (اولین فرصت)

این پیام خاص یک استثنا است، یعنی استثنای اولین فرصت. در اصل، استثنا یک شرایط خاص است که در حین اجرای یک برنامه اتفاق می افتد. استثنای اولین فرصت به این معنی است که برنامه بلافاصله پس از وقوع استثنا متوقف می شود. استثنا شانس دوم به این معنی است که پس از وقوع استثنا، برخی از عملیات ها انجام می شود و سپس برنامه کار خود را متوقف می کند.

ثبت می کند

پس از نمایش پیام ها و استثناها، دیباگر وضعیت رجیسترهای پردازنده را خروجی می دهد. ثبات ها متغیرهای خاصی در پردازنده هستند که قطعات کوچکی از اطلاعات را ذخیره می کنند یا وضعیت چیزی را در حافظه پیگیری می کنند. پردازنده می تواند اطلاعات موجود در این ثبات ها را خیلی سریع پردازش کند. این بسیار سریعتر از دریافت هر بار اطلاعات در اتوبوس از 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 سی سی 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 سی سی int 3

در تماس باش

در مقالات بعدی، نحوه استفاده از WinDBG در مبارزات را بررسی خواهیم کرد: نقاط شکست، اشکال زدایی پله ای و مشاهده حافظه. سوئیچ نکن! جی.

برای شناسایی علل صفحه آبی (BSOD)، لازم است که حافظه خالی را تجزیه و تحلیل کنید. در اکثریت قریب به اتفاق موارد یک minidump کافی است که در صورت بروز خطاهای بحرانی توسط سیستم ایجاد می شود.
این مقاله حاوی آموزش گام به گامبرای نصب و پیکربندی WinDBG - یک ابزار اشکال زدایی قدرتمند که به شما امکان می دهد علت واقعی BSOD را شناسایی کنید.

مرحله 1 - تنظیم ضبط کم حافظه کوچک

مرحله 2 - نصب WinDBG

برای تجزیه و تحلیل تخلیه حافظه، باید دیباگر WinDBG را نصب کنید که با SDK ویندوز موجود است. در زمان نگارش، آخرین نسخه های موجود Windows SDK عبارتند از:

  • Windows 10 SDK (دانلود نصب کننده آنلاین)
  • Windows 8.1 SDK (دانلود نصب کننده آنلاین)

مرحله 3 - نگاشت فایل های .dmp به WinDBG

فایل‌های .dmp خود را به WinDBG نگاشت کنید تا خواندن و تجزیه و تحلیل موارد خالی از حافظه آسان‌تر شود. این به شما این امکان را می دهد که فایل های dump را از Explorer مستقیماً در WinDBG باز کنید و از راه اندازی اولیه آن عبور کنید.


مرحله 4 - راه اندازی سرور نماد برای دریافت فایل های نماد اشکال زدایی


نصب و پیکربندی اولیه WinDBG اکنون کامل شده است. به منظور تغییر ظاهر آن، می توانید به منو بروید چشم انداز- تنظیمات فونت را با انتخاب مورد پیدا خواهید کرد فونتو تنظیمات پنجره کنسول در گزینه ها.

در زمان خرابی بحرانی، سیستم عامل ویندوز از کار می افتد و نشان می دهد صفحه آبیمرگ (BSOD). محتوا حافظه دسترسی تصادفیو تمام اطلاعات مربوط به خطای رخ داده در فایل صفحه بندی نوشته می شود. در بعدی بوت شدن ویندوزیک خرابی خرابی با اطلاعات اشکال زدایی بر اساس داده های ذخیره شده ایجاد می شود. یک خطای مرگبار در گزارش رویداد سیستم ایجاد می شود.

توجه!اگر زیرسیستم دیسک خراب شده باشد یا خراب باشد، خرابی ایجاد نمی شود خطاهای اساسیدر مرحله اولیه بارگذاری ویندوز بوجود آمد.

انواع خرابی ویندوز

با استفاده از مثال سیستم عامل فعلی ویندوز 10 ( ویندوز سرور 2016) انواع اصلی تخلیه حافظه را که سیستم می تواند ایجاد کند را در نظر بگیرید:

  • مینی حافظه کم (حافظه کوچک)(256 کیلوبایت). این نوع فایل شامل حداقل اطلاعات است. این فقط حاوی پیام خطای BSOD، اطلاعات مربوط به درایورها، فرآیندهایی است که در زمان خرابی فعال بودند، و اینکه کدام فرآیند یا رشته هسته باعث خرابی شده است.
  • تخلیه حافظه هسته. معمولاً کوچک، یک سوم مقدار حافظه فیزیکی است. تخلیه حافظه هسته جزئیات بیشتری نسبت به minidump دارد. این شامل اطلاعاتی در مورد درایورها و برنامه ها در حالت هسته است، شامل حافظه اختصاص داده شده است هسته ویندوزو لایه انتزاعی سخت افزاری (HAL) و همچنین حافظه اختصاص داده شده به درایورها و سایر برنامه ها در حالت هسته.
  • تخلیه کامل حافظه. بزرگ‌ترین اندازه و به حافظه‌ای برابر با رم سیستم شما به اضافه 1 مگابایت مورد نیاز ویندوز برای ایجاد این فایل نیاز دارد.
  • تخلیه خودکار حافظه. از نظر اطلاعات مربوط به تخلیه حافظه هسته است. این فقط در میزان فضایی که برای ایجاد فایل dump استفاده می کند متفاوت است. این نوع فایل در ویندوز 7 وجود نداشت. در ویندوز 8 اضافه شد.
  • تخلیه حافظه فعال. این نوع عناصری را که نمی توانند علت خرابی سیستم را تعیین کنند، فیلتر می کند. این در ویندوز 10 اضافه شده است و به ویژه اگر از یک ماشین مجازی استفاده می کنید یا سیستم شما یک هاست Hyper-V است مفید است.

چگونه می توان تولید Dump حافظه را در ویندوز فعال کرد؟

با استفاده از Win + Pause، پنجره تنظیمات سیستم را باز کنید، " را انتخاب کنید تنظیمات اضافی سیستم" (تنظیمات پیشرفته سیستم). در برگه " علاوه بر این" (پیشرفته)، بخش "" (راه اندازی و بازیابی)، روی دکمه کلیک کنید " گزینه ها" (تنظیمات). در پنجره ای که باز می شود، اقدامات در صورت خرابی سیستم را پیکربندی کنید. چک باکس " رویدادها را بنویسید syslog » (رویدادی را در گزارش سیستم بنویسید)، نوع Dump را انتخاب کنید که در هنگام خرابی سیستم ایجاد شود. اگر در چک باکس " فایل dump موجود را جایگزین کنید» (بازنویسی هر فایل موجود) کادر را علامت بزنید، فایل در هر خرابی رونویسی می شود. بهتر است تیک این کادر را بردارید، سپس اطلاعات بیشتری برای تجزیه و تحلیل خواهید داشت. را نیز غیرفعال کنید راه اندازی مجدد خودکارسیستم (راه اندازی مجدد خودکار).

در بیشتر موارد، یک تخلیه کوچک حافظه برای تجزیه و تحلیل علت BSOD کافی است.

اکنون، اگر BSOD رخ دهد، می توانید فایل dump را تجزیه و تحلیل کنید و علت خرابی ها را پیدا کنید. یک minidump به طور پیش فرض در پوشه %systemroot%\minidump ذخیره می شود. برای تجزیه و تحلیل فایل dump، توصیه می کنم از برنامه استفاده کنید WinDBG(دیباگر هسته مایکروسافت).

نصب WinDBG روی ویندوز

سودمند WinDBGگنجانده شده در " Windows 10 SDK» (Windows 10 SDK). .

فایل نامیده می شود winsdksetup.exeحجم 1.3 مگابایت

نصب را اجرا کنید و انتخاب کنید که بسته را روی این رایانه نصب کنید یا آن را برای نصب در رایانه های دیگر دانلود کنید. بسته را روی رایانه محلی نصب کنید.

شما می توانید کل بسته را نصب کنید، اما برای نصب فقط ابزار اشکال زدایی را انتخاب کنید ابزارهای رفع اشکال برای ویندوز.

پس از نصب، میانبرهای WinDBG را می توان در منوی شروع پیدا کرد.

تنظیم ارتباط فایل های .dmp با WinDBG

برای باز کردن فایل‌های dump با یک کلیک ساده، پسوند .dmp را به ابزار WinDBG نگاشت کنید.

  1. یک خط فرمان را به عنوان مدیر باز کنید و دستورات یک سیستم 64 بیتی را اجرا کنید: cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
    windbg.exe –IA
    برای سیستم 32 بیتی:
    C:\Program Files (x86)\Windows Kits\10\Debuggers\x86
    windbg.exe –IA
  2. در نتیجه، انواع فایل: .DMP، .HDMP، .MDMP، .KDMP، .WEW به WinDBG نگاشت می شوند.

راه اندازی سرور نماد اشکال زدایی در WinDBG

نمادهای اشکال زدایی (نشانه های اشکال زدایی یا فایل های نماد) بلوک های داده ای هستند که در فرآیند کامپایل یک برنامه همراه با یک فایل اجرایی تولید می شوند. چنین بلوک های داده حاوی اطلاعاتی در مورد نام متغیرها، به نام توابع، کتابخانه ها و غیره هستند. این داده ها هنگام اجرای برنامه مورد نیاز نیستند، اما هنگام اشکال زدایی آن مفید هستند. اجزای مایکروسافت با نمادهایی که از طریق سرور نماد مایکروسافت توزیع شده اند، جمع آوری می شوند.

WinDBG را برای استفاده از Microsoft Symbol Server راه اندازی کنید:

  • WinDBG را باز کنید؛
  • به منو بروید فایل –> مسیر فایل نماد.
  • یک رشته حاوی URL برای دانلود نمادهای اشکال زدایی از وب سایت مایکروسافت و پوشه ای برای ذخیره کش بنویسید: SRV*E:\Sym_WinDBG*http://msdl.microsoft.com/download/symbols در مثال، حافظه پنهان دانلود می شود. در پوشه E:\Sym_WinDBG، می توانید هر کدام را مشخص کنید.
  • فراموش نکنید که تغییرات را در منو ذخیره کنید فایل–>ذخیره فضای کاری؛

WinDBG نمادها را در پوشه محلی جستجو می کند و در صورتی که علائم لازم را در آن پیدا نکرد، به طور خودکار نمادها را از سایت مشخص شده دانلود می کند. اگر می خواهید پوشه نمادهای خود را اضافه کنید، می توانید این کار را به صورت زیر انجام دهید:

SRV*E:\Sym_WinDBG*http://msdl.microsoft.com/download/symbols;c:\Symbols

اگر اتصال به اینترنت وجود ندارد، ابتدا بسته نماد را از منبع Windows Symbol Packages دانلود کنید.

تجزیه و تحلیل خرابی در WinDBG

دیباگر WinDBG فایل dump را باز می کند و نمادهای لازم برای اشکال زدایی را از یک پوشه محلی یا از اینترنت دانلود می کند. در طول این فرآیند، نمی توانید از WinDBG استفاده کنید. در پایین پنجره (در خط فرمان دیباگر) کتیبه ظاهر می شود اشکال زدایی متصل نیست.

دستورات در خط فرمان واقع در پایین پنجره وارد می شوند.

مهمترین چیزی که باید به آن توجه کنید کد خطا است که همیشه در آن نشان داده شده است مقدار هگزادسیمالو به نظر می رسد 0xXXXXXXXXX(در یکی از گزینه ها مشخص شده است - STOP:, 07/02/2019 0008F, 0x8F). در مثال ما، کد خطا 0x139 است.

دیباگر از شما می‌خواهد که دستور -v را اجرا کنید، فقط روی لینک بروید و کلیک کنید. این دستور برای چیست؟

  • تجزیه و تحلیل اولیه حافظه را انجام می دهد و ارائه می دهد اطلاعات دقیقبرای شروع تجزیه و تحلیل
  • این دستور کد STOP و نام نمادین خطا را نمایش می دهد.
  • پشته فراخوانی دستوراتی را نشان می دهد که منجر به خرابی شده است.
  • علاوه بر این، خطاهای آدرس IP، پردازش و ثبت در اینجا نمایش داده می شوند.
  • تیم می تواند توصیه های آماده ای برای حل مشکل ارائه دهد.

نکات اصلی که باید در هنگام تجزیه و تحلیل پس از اجرای دستور !analyze -v به آنها توجه کنید (لیست کامل نیست).

1: kd> !analyze -v


* *
*تحلیل بررسی اشکال*
* *
*****************************************************************************
نام نمادین خطای STOP (BugCheck)
KERNEL_SECURITY_CHECK_FAILURE (139)
شرح خطا (یک جزء هسته یک ساختار داده مهم را خراب کرده است. این خرابی به طور بالقوه می تواند به مهاجم اجازه دهد کنترل این ماشین را در دست بگیرد):

یک جزء هسته یک ساختار داده مهم را خراب کرده است. این فساد به طور بالقوه می تواند به کاربر مخرب اجازه دهد تا کنترل این دستگاه را در دست بگیرد.
آرگومان های خطا:

استدلال ها:
Arg1: 0000000000000003، یک LIST_ENTRY خراب شده است (یعنی دو بار حذف شود).
Arg2: ffffd0003a20d5d0، آدرس قاب تله برای استثنایی که باعث بررسی باگ شده است
Arg3: ffffd0003a20d528، آدرس رکورد استثنا برای استثنایی که باعث بررسی باگ شده است
ارگ4: 0000000000000000، رزرو شده
جزئیات رفع اشکال:
------------------

شمارنده نشان می دهد که چند بار سیستم با یک خطای مشابه از کار افتاده است:

CUSTOMER_CRASH_COUNT: 1

DEFAULT_BUCKET_ID: FAIL_FAST_CORRUPT_LIST_ENTRY

کد خطا STOP به صورت اختصاری:

BUGCHECK_STR: 0x139

فرآیندی که از کار افتاد (الزاماً دلیل خطا نیست، فقط آن فرآیند در زمان خرابی در حافظه اجرا می شد):

PROCESS_NAME: sqlservr.exe

رمزگشایی کد خطا: سیستم سرریز پشته بافر را در این برنامه شناسایی کرده است که ممکن است به مهاجم اجازه دهد کنترل این برنامه را در دست بگیرد.

ERROR_CODE: (NTSTATUS) 0xc0000409 - سیستم بیش از حد یک بافر مبتنی بر پشته را در این برنامه تشخیص داد. این بیش از حد به طور بالقوه می تواند به کاربر مخرب اجازه دهد تا کنترل این برنامه را به دست آورد.
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - سیستم بیش از حد یک بافر مبتنی بر پشته را در این برنامه تشخیص داد. این بیش از حد به طور بالقوه می تواند به کاربر مخرب اجازه دهد تا کنترل این برنامه را به دست آورد.

آخرین تماس در پشته:

LAST_CONTROL_TRANSFER: از fffff8040117d6a9 به fffff8040116b0a0

پشته تماس در زمان شکست:

STACK_TEXT:
FFFF
ffffd000`3a20d2b0 fffff804`0117da50: ffffe000`f3ab9080 ffffe000`fc37e001 ffffd000`3a20d5d0 fffff804`0116e2a2KiBxpatch!
fffd000`3a20d3f0 fffff804`0117c150: 00000000`000000000 00000000`00000000 000000000`0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
FFFF
ffffd000`3a20d760 fffff804`014a455d: 00000000`00000001 ffffd000`3a20d941 fffe000`fcacb000 ffffd000`3a20d95! ?? ::FNODOBFM::`string"+0x17252
ffffd000`3a20d8c0 fffff804`013a34ac: 00000000`00000004 00000000`00000000
ffffd000`3a20d990 fffff804`0117d313: fffffff`fffffffe 00000000`00000000 00000000`000000000 000000eb`a0cf1380:
FFFF
000000ee'f25ed2b8 00000000'00000000: 00000000'0000000000000000

بخشی از کد که در آن خطا رخ داده است:

FOLLOWUP_IP:
nt!KiFastFailDispatch+d0
fffff804`0117da50 c644242000 mov byte ptr ,0
FAULT_INSTR_CODE: 202444c6
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: nt!KiFastFailDispatch+d0
FOLLOWUP_NAME: مالک ماشین

نام ماژول در جدول شی هسته. اگر آنالیزور توانست یک درایور مشکل دار را تشخیص دهد، نام در فیلدهای MODULE_NAME و IMAGE_NAME نمایش داده می شود:

MODULE_NAME: nt
IMAGE_NAME: ntkrnlmp.exe

1: kd > lmvm nt
فهرست کامل ماژول را مرور کنید
فایل تصویر نماد بارگذاری شده: ntkrnlmp.exe
فایل تصویر حافظه نگاشت شده: C:\ProgramData\dbg\sym\ntoskrnl.exe\5A9A2147787000\ntoskrnl.exe
مسیر تصویر: ntkrnlmp.exe
نام تصویر: ntkrnlmp.exe
نام داخلی: ntkrnlmp.exe
نام فایل اصلی: ntkrnlmp.exe
نسخه محصول: 6.3.9600.18946
نسخه فایل: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)

در مثال بالا، تجزیه و تحلیل به فایل هسته ntkrnlmp.exe اشاره کرد. هنگامی که تجزیه و تحلیل تخلیه حافظه به یک درایور سیستم (به عنوان مثال، win32k.sys) یا یک فایل هسته (به عنوان مثال، ntkrnlmp.exe در مثال ما) اشاره می کند، به احتمال زیاد فایل داده شدهعلت مشکل نیست خیلی اوقات معلوم می شود که مشکل در درایور دستگاه است، تنظیمات بایوسیا خرابی تجهیزات

اگر می بینید که BSOD به دلیل یک راننده شخص ثالث است، نام آن در مقادیر MODULE_NAME و IMAGE_NAME فهرست می شود.

مثلا:

مسیر تصویر: \SystemRoot\system32\drivers\cmudaxp.sys
نام تصویر: cmudaxp.sys

ویژگی های فایل درایور را باز کنید و نسخه آن را بررسی کنید. در بیشتر موارد، مشکل درایورها با به روز رسانی آنها حل می شود.

این نوع خرابی ها معمولاً با یک درایور ناموفق همراه هستند که تشخیص دقیق آن دشوار است. با این حال، سیستم ردیابی اشکال بهبود یافته در ویندوز ویستا(و نه تنها در ویستا!) اغلب می تواند شما را به یک فایل مشکل دار هدایت کند. در نتیجه، اکثر مردم از تلاش دیوانه وار برای کار بر روی یک کامپیوتر ناپایدار دست می کشند، اسناد را با نظمی پارانوئیدی ذخیره می کنند و به بهترین ها امیدوارند.

در ویندوز خراب میشهمعمولاً به اصطلاح "حافظه خالی" ایجاد می شود. مورد دوم را می توان با ابزار اشکال زدایی رایگان کاوش کرد. ابزار ویندوزابزارهای اشکال زدایی، که می تواند شما را به منبع مشکل راهنمایی کند. بنابراین، تنها کاری که باید انجام دهید این است:

خودتان یک ابزار اشکال زدایی را دانلود کنید

می توانید ابزارهای اشکال زدایی ویندوز را مستقیماً از وب سایت مایکروسافت دانلود کنید. این برنامه با بسیاری از سیستم عامل ها کار می کند، از ویندوز NT 4 شروع می شود و به ویندوز 2008 ختم می شود، بنابراین نباید با آن مشکلی داشته باشید. بله، نمی توان گفت که در ویندوز 7 RC پایدار است، اما طبق آزمایشات ما همچنان کار می کند. بنابراین، حتی تلاش برای تشخیص مشکل از زیر ویندوز 7 RC ممکن است موفقیت آمیز باشد.

سیستم خود را پیکربندی کنید

در هنگام خرابی، رایانه شما نیاز به ایجاد حافظه خالی دارد که بعداً به عنوان منبع اطلاعاتی برای دیباگر عمل می کند. بنابراین، مهم است که ویندوز برای ایجاد Dump پیکربندی شده باشد. برای سفارشی کردن سیستم عامل خود، کلیک کنید کلیک راستماوس را روی رایانه خود قرار دهید و Properties را انتخاب کنید. سپس بر روی تب Advanced System Settings کلیک کنید، روی آن زیربخش Startup and Recovery Settings را پیدا کنید و مطمئن شوید که گزینه Write debugging information روی Kernel memory dump ) یا Complete memory dump تنظیم شده است.

بعد، روی Start کلیک کنید، به برنامه ها (همه برنامه ها) بروید، Debugging Tools را انتخاب کنید و WinDbg را اجرا کنید. در برنامه به منوی File رفته و Symbol File Path را انتخاب کنید ... سپس در پنجره باز شده خط زیر را بنویسید:

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

دومی مسیر داده های ویژه را تعریف می کند - به اصطلاح "نمادها" (نمادها)، که می تواند به ابزار اشکال زدایی در شناسایی فایل خراب شما کمک کند.

پس از وارد کردن رشته، روی دکمه OK کلیک کنید. بعداً هنگام کار با دیباگر، این خط باعث می شود که نمادها از msdl.microsoft.com دانلود و در پوشه c:\symbols ذخیره شوند.

مشکلت رو حل کن

اکنون منتظر یک خرابی دیگر در صفحه آبی و سپس تکمیل مجدد رایانه باشید. سپس دوباره WinDbg را اجرا کنید (کاربران ویستا باید برنامه را به عنوان یک مدیر اجرا کنند)، روی منوی File کلیک کنید، Open Crash Dump را انتخاب کنید، فایل \Windows\MEMORY.DMP را باز کنید و برنامه بلافاصله شروع به تجزیه و تحلیل آن می کند.

متأسفانه WinDbg اطلاعات بسیار کمی در مورد کارهایی که انجام می دهد ارائه می دهد، بنابراین حتی ممکن است فکر کنید که برنامه گیر کرده است. با این حال، صبر کنید. درک کنید، تجزیه و تحلیل مثلاً 4 گیگابایت حافظه زیاد نیست کامپیوتر قدرتمندممکن است مدتی طول بکشد، تا چند ساعت. بنابراین، صبور باشید، بلکه تجزیه و تحلیل را یک شبه رها کنید.

با این حال، معمولا نتیجه در عرض چند دقیقه به دست می آید. این را خط تجزیه و تحلیل Bugcheck نشان می دهد که چیزی شبیه به "احتمالاً توسط: UACReplace.sys ایجاد شده است". به روسی ترجمه شده است، به این معنی که مشکل احتمالاً توسط فایل UACReplace.sys ایجاد شده است. آن را در نوار جستجو، به عنوان مثال، گوگل وارد کنید و منشا واقعی آن را خواهید فهمید. مخصوصاً اگر متعلق به یکی از برنامه هایی باشد که نصب کرده اید یا درایور نصب شده، سپس فقط می توانید سعی کنید آن را یا او را به روز کنید. شاید این مشکل شما را حل کند.

باید بگویم که گهگاهی WinDbg اصلا نمی تواند فایل را نامگذاری کند یا به سادگی یکی از DLL های ویندوز را انتخاب می کند. اگر این اتفاق برای شما افتاد، کافیست روی پنجره فرمان بالای نوار وضعیت کلیک کنید و دستور را تایپ کنید:

پس از آن Enter را فشار دهید. این گزارش مفصل تری را در اختیار شما قرار می دهد که ممکن است حاوی اطلاعاتی در مورد آن باشد دلایل ممکنمشکلات شما

اگر این بار خوش شانس نیستید، ناامید نشوید. اشکال زدایی حتی برای متخصصان بسیار دشوار است. پس کافیست WinDbg را ببندید و بعد از خرابی بعدی دوباره آنالایزر را اجرا کنید. شاید این اطلاعات بیشتری به شما بدهد. موفق باشید!

ابزارهای رفع اشکال برای ویندوز- ابزارهایی برای اشکال زدایی کدهای سیستم عامل ویندوز. آنها مجموعه ای از برنامه های آزادانه توزیع شده از مایکروسافت هستند که برای اشکال زدایی کدهای حالت کاربر و حالت هسته طراحی شده اند: برنامه ها، درایورها، خدمات، ماژول های هسته. این جعبه ابزار شامل دیباگرهای کنسول و رابط کاربری گرافیکی، ابزارهای کاربردی برای کار با نمادها، فایل ها، فرآیندها، ابزارهایی برای اشکال زدایی از راه دور است. جعبه ابزار شامل ابزارهایی است که با آن می توانید دلایل خرابی در اجزای مختلف سیستم را پیدا کنید. ابزارهای رفع اشکال برای ویندوزاز یک لحظه خاص برای دانلود در قالب یک توزیع مستقل در دسترس نیستند و بخشی از Windows SDK (کیت توسعه نرم افزار ویندوز) هستند. Windows SDK، به نوبه خود، به عنوان بخشی از برنامه اشتراک MSDN در دسترس است، یا می توان آن را آزادانه به عنوان یک توزیع جداگانه از msdn.microsoft.com دانلود کرد. به گفته توسعه دهندگان، جدیدترین و بهترین نسخه فعلیابزارهای اشکال زدایی برای ویندوز در SDK ویندوز موجود است.

ابزارهای اشکال زدایی برای ویندوز اغلب به روز می شوند و در دسترس عموم قرار می گیرند و این فرآیند به انتشار سیستم عامل ها بستگی ندارد. بنابراین، به طور دوره ای نسخه های جدید را بررسی کنید.

اکنون بیایید ببینیم که ابزارهای Debugging به طور خاص برای چه چیزی هستند ویندوز مایکروسافت:

  • اشکال زدایی برنامه های محلی، خدمات (خدمات)، درایورها و هسته؛
  • اشکال زدایی از طریق شبکه برنامه های کاربردی از راه دور، خدمات (خدمات)، درایورها و هسته؛
  • اشکال زدایی برنامه های در حال اجرا در زمان واقعی.
  • تجزیه و تحلیل فایل های تخلیه حافظه برنامه ها، هسته و سیستم به عنوان یک کل؛
  • کار با سیستم های مبتنی بر معماری x86/x64/ایتانیوم.
  • اشکال زدایی برنامه های حالت کاربر و حالت هسته.

نسخه های زیر از ابزارهای اشکال زدایی برای ویندوز موجود است: 32 بیت x86، اینتل Itanium، 64 بیت x64. ما به دو مورد از آنها نیاز داریم: x86 یا x64.

راه های مختلفی برای نصب ابزارهای اشکال زدایی برای ویندوز وجود دارد، در این مقاله تنها موارد اصلی را در نظر خواهیم گرفت:

  • نصب از طریق نصب کننده وب
  • نصب ابزارهای اشکال زدایی برای ویندوز از Windows SDK ISO.
  • نصب ابزارهای اشکال زدایی برای ویندوز به طور مستقیم از بسته های dbg_amd64.msi /dbg_x86.msi.

مشخص نیست در چه مرحله ای، چرا باید ابزارهای اشکال زدایی را روی رایانه نصب کنم؟ اغلب اوقات، پس از همه، شما با موقعیتی مواجه می شوید که مداخله در محیط کاربسیار نامطلوب! و حتی بیشتر از این، زیرا نصب یک محصول جدید، یعنی ایجاد تغییرات در فایل های رجیستری / سیستم، ممکن است کاملا غیر قابل قبول باشد. سرورهای ماموریت حیاتی نمونه هایی هستند. چرا توسعه دهندگان نسخه های قابل حمل برنامه هایی را که نیازی به نصب ندارند در نظر نمی گیرند؟
از نسخه ای به نسخه دیگر، روند نصب بسته Debugging Tools برای ویندوز دستخوش تغییراتی می شود. حالا بیایید مستقیماً به فرآیند نصب بپردازیم و به روش‌هایی که جعبه ابزار را می‌توان نصب کرد نگاهی بیندازیم.

نصب ابزارهای اشکال زدایی برای ویندوز با استفاده از Web Installer

به صفحه Windows SDK Archive بروید و بخشی به نام Windows 10 و زیر مورد "Windows 10 SDK (10586) and Microsoft Windows 10 Mobile Device Emulator (نسخه 10586.11)" را پیدا کنید.

روی یک مورد کلیک کنید SDK را نصب کنید. پس از کلیک کردن، فایل sdksetup.exe را دانلود کرده و اجرا کنید که فرآیند را آغاز می کند نصب آنلاین ویندوز SDK. در مرحله اولیه، نصب کننده بررسی می کند که آیا آخرین نسخه بسته .NET Framework روی سیستم نصب شده است (در حال حاضر 4.5 است). اگر بسته وجود نداشته باشد، نصب ارائه می‌شود و پس از اتمام، ایستگاه راه‌اندازی مجدد می‌شود. بلافاصله پس از راه اندازی مجدد، در مرحله مجوز کاربر، فرآیند نصب به طور مستقیم با SDK ویندوز شروع می شود.

اغلب، هنگام انتخاب تمام اجزای بسته بدون استثنا، ممکن است در مراحل نصب خطاهایی رخ دهد. در این مورد، توصیه می شود قطعات را به صورت انتخابی، حداقل مجموعه مورد نیاز نصب کنید.

پس از اتمام نصب Debugging Tools برای ویندوز، محل فایل های دیباگ با این روش نصب به صورت زیر خواهد بود:

  • نسخه های 64 بیتی: C:\Program Files (x86)\Windows Kits\x.x\Debuggers\x64
  • نسخه های 32 بیتی: C:\Program Files (x86)\Windows Kits\x.x\Debuggers\x86

* جایی که x.x یک نسخه خاص از کیت توسعه است.
ما متوجه شدیم که نسخه های 8 و بالاتر، مسیرهای نصب به طور قابل توجهی با موارد کلاسیک برای همه متفاوت است نسخه های قبلیابزارهای رفع اشکال؟

یک امتیاز بزرگ این روشنصب Debigging Tools برای ویندوز به این معنی است که نسخه هایی از ابزارهای اشکال زدایی را برای همه معماری ها به طور همزمان نصب کنید.

نصب ابزارهای اشکال زدایی برای ویندوز از Windows SDK ISO

این روش شامل نصب ابزارهای اشکال زدایی برای ویندوز با استفاده از تصویر نصب کامل ویندوز SDK (کیت توسعه دهندگان نرم افزار) است. تا زمان مشخصی دانلود کنید تصویر isoبرای سیستم مناسب، می توانید از صفحه آرشیو Windows SDK دیدن کنید. با این حال، در حال حاضر، می‌توانید با اجرای web installer sdksetup.exe و انتخاب مورد، یک تصویر ISO از SDK دریافت کنید. کیت توسعه نرم افزار ویندوز را دانلود کنیددر پنجره شروع نصب کننده:

همانطور که مشخص شد، روش نصب قبلی با استفاده از نصب کننده وب بسیار دمدمی مزاج است و اغلب با شکست مواجه می شود. در سیستم های پاکبدون مشکل نصب شده است، با این حال، در بارگذاری کافی از قبل، مشکلات متعددی ایجاد می شود. اگر این مورد برای شماست، پس از این روش استفاده کنید.

بر این اساس، در صفحه باید کیت توزیع مورد نیاز را انتخاب کنید، برای من (و فکر می کنم برای بسیاری) در حال حاضر "Windows SDK for Windows 7 و .NET Framework 4" است و کمی پایین تر روی پیوند "دریافت" کلیک کنید. تصویر DVD ISO".

هنگام کار با سایت msdn.microsoft.com، به شما توصیه می کنم از آن استفاده کنید مرورگر اینترنتکاوشگر زیرا محصولات رقیب کار نمی کنند!

بر این اساس، لازم است فقط در صورت لزوم انتخاب شود. معمولا بیتی Debugging Tools برای ویندوز همان بیتی سیستم است. سیستم های آزمایشی من اکثراً 64 بیتی هستند، بنابراین در بیشتر موارد من تصویر را برای سیستم 64 بیتی GRMSDKX_EN_DVD.iso دانلود می کنم.
سپس پس از دانلود تصویر، باید به نحوی با تصویر ISO موجود کار کنیم. روش سنتی البته رایت سی دی است، اما این روش نسبتا طولانی و گاهی پرهزینه است. پیشنهاد می کنم از ابزارهای رایگان برای ایجاد دستگاه های دیسک مجازی در سیستم استفاده کنید. من شخصا ترجیح می دهم از برنامه DEAMON Tools Lite برای این منظور استفاده کنم. ممکن است شخصی ترجیحات دیگری داشته باشد، ابزارهای مستقیم تر یا سبک تر، در طعم و رنگ، همانطور که می گویند .. پس از نصب ابزار شبح Lite، من فقط روی فایل تصویر GRMSDKX_EN_DVD.iso دوبار کلیک می کنم و یک سی دی مجازی جدید در سیستمم دارم:

سپس دوبار کلیک می کنم تا autoload فعال شود و اجرا شود نصب ویندوز SDK:

وقتی نوبت به انتخاب اجزای مورد نظر برای نصب از لیست می رسد، ما کاملاً همه گزینه ها را غیرفعال می کنیم به جز مواردی که در تصویر مشخص شده اند. این به ما کمک می کند از اشتباهات غیر ضروری در حال حاضر جلوگیری کنیم.


درست است، اسکرین شات دو گزینه را نشان می دهد: "Windows Performance Toolkit" و "Debugging Tools for Windows". هر دو را انتخاب کنید، زیرا Windows Performance Toolkit مطمئناً در کار شما مفید خواهد بود! علاوه بر این، پس از کلیک بر روی دکمه "Next"، نصب در حالت عادی ادامه می یابد. و در انتها کتیبه "نصب کامل" را مشاهده خواهید کرد.
پس از اتمام نصب، دایرکتوری های کاری کیت Debugging Tools برای ویندوز به صورت زیر خواهد بود:

  • برای نسخه x86:
  • برای نسخه x64:

این کار نصب ابزارهای Debugging را برای ویندوز کامل می کند.

نصب ابزارهای Debugging برای ویندوز از طریق فایل msi

در صورت بروز مشکل در هنگام نصب ابزارهای اشکال زدایی برای ویندوز به دو روش قبلی، ما هنوز یک مورد دیگر داریم، قابل اطمینان ترین و تست شده ترین مورد، که به اصطلاح، بیش از یک بار کمک کرده است. یک بار، قبل از ادغام در Windows SDK، ابزارهای اشکال زدایی برای ویندوز به عنوان یک نصب کننده .msi جداگانه در دسترس بودند، که هنوز هم می توان آن را یافت، اما در حال حاضر در بطن توزیع SDK ویندوز وجود دارد. از آنجایی که قبلاً یک تصویر ISO از Windows SDK در دسترس داریم، نمی‌توانیم آن را در سیستم نصب کنیم، بلکه به سادگی آن را با استفاده از بایگانی معروف WinRAR یا هر محصول دیگری که با محتویات دیسک‌های ISO کار می‌کند باز کنیم.

پس از باز کردن تصویر، باید به دایرکتوری "Setup" واقع در ریشه بروید و سپس یکی از دایرکتوری ها را انتخاب کنید:

  • برای نصب نسخه 64 بیتی: \Setup\WinSDKDebuggingTools_amd64و فایل dbg_amd64.msi را از این دایرکتوری باز کنید.
  • برای نصب نسخه 32 بیتی: \Setup\WinSDKDebuggingTools و فایل dbg_x86.msi را از این دایرکتوری باز کنید.

پس از اتمام نصب، دایرکتوری های کاری کیت Debugging Tools برای ویندوز به صورت زیر خواهد بود:

  • برای نسخه x86: C:\Program Files (x86)\Debugging Tools for Windows (x86)
  • برای نسخه x64: C:\Program Files\Debugging Tools for Windows (x64)

در این مرحله می توان نصب Debugging Tools برای ویندوز را تکمیل شده در نظر گرفت.

اطلاعات اضافی

نمی دونم با چی وصل میشه، شاید با بی دقتی من، ولی بعد از نصب Debugging Tools برای ویندوز، نصب کننده مسیر دایرکتوری رو با دیباگر در متغیر Path system path تنظیم نمی کنه. این محدودیت های خاصی را برای اجرای وظایف اشکال زدایی مختلف به طور مستقیم از کنسول اعمال می کند. بنابراین، در نبود مسیر، من خودم در پنجره می نویسم متغیرهای محیطیمسیر ابزارهای اشکال زدایی:

  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x86
  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

* در مورد شما، مسیرها ممکن است هم به دلیل استفاده از یک سیستم عامل با بیت متفاوت و هم به دلیل استفاده از یک SDK نسخه متفاوت متفاوت باشد.

برنامه های کاربردی بسته Debugging Tools برای ویندوز می توانند به عنوان برنامه های قابل حمل کار کنند، فقط کافی است از آن کپی کنید سیستم کاریکاتالوگ مایکروسافت ویندوز عملکرد ابزارو از آن به عنوان یک نسخه قابل حمل در سرور تولید استفاده کنید. اما فراموش نکنید که ظرفیت سیستم را در نظر بگیرید !! حتی اگر بسته را روی یک سیستم مهم نصب کرده باشید، می توانید بلافاصله پس از نصب شروع به کار کنید، نیازی به راه اندازی مجدد نیست.

ابزارهای رفع اشکال برای ویندوز

و اکنون، در نهایت، ترکیب ابزارهای Debugging برای ویندوز به شرح زیر است:

فایل هدف
adplus.doc اسناد برای ابزار ADPlus.
adplus.exe یک برنامه کنسولی که کار دیباگر cdb را برای ایجاد dumps، فایل های لاگ برای یک یا چند فرآیند خودکار می کند.
agestore.exe ابزاری برای حذف فایل های منسوخ از فضای ذخیره سازی مورد استفاده توسط سرور نماد یا سرور منبع.
breakin.exe ابزاری که به شما امکان می‌دهد یک ترکیب شکست سفارشی به فرآیندها ارسال کنید، شبیه به فشار دادن CTRL+C.
cdb.exe دیباگر کنسول حالت کاربر.
convertstore.exe ابزار تبدیل کاراکترها از 2 لایه به 3 لایه.
dbengprx.exe Ripiter (سرور پروکسی) برای اشکال زدایی از راه دور.
dbgpc.exe ابزاری برای نمایش اطلاعات در مورد وضعیت تماس RPC.
dbgsrv.exe فرآیند سرور مورد استفاده برای اشکال زدایی از راه دور.
dbh.exe ابزاری برای نمایش اطلاعات در مورد محتوای یک فایل نماد.
dumpchk.exe ابزار تأیید تخلیه. ابزار مفید برای بررسی سریعفایل دامپ
dumpexam.exe ابزاری برای تجزیه و تحلیل یک حافظه خالی نتیجه به %SystemRoot%\MEMORY.TXT خروجی می‌شود.
gflags.exe ویرایشگر پرچم های سیستم جهانی. این ابزار کلیدهای رجیستری و سایر تنظیمات را مدیریت می کند.
i386kd.exe لفاف برای kd. آیا این همان چیزی بود که زمانی kd برای سیستم های مبتنی بر ویندوز NT/2000 برای ماشین های x86 نامیده می شد؟ احتمالا به دلایل سازگاری رها شده است.
ia64kd.exe لفاف برای kd. آیا این همان چیزی بود که زمانی kd برای سیستم های مبتنی بر ویندوز NT/2000 برای ماشین های ia64 نامیده می شد؟ احتمالا به دلایل سازگاری رها شده است.
kd.exe دیباگر کنسول حالت هسته.
kdbgctrl.exe ابزار مدیریت اشکال زدایی هسته ابزاری برای مدیریت و پیکربندی اتصال اشکال زدایی هسته.
kdsrv.exe سرور اتصال برای KD. این ابزار یک برنامه کوچک است که اجرا می شود و منتظر اتصال از راه دور می ماند. kd روی یک کلاینت اجرا می شود و برای رفع اشکال از راه دور به آن سرور متصل می شود. سرور و کلاینت هر دو باید از یک مجموعه ابزارهای اشکال زدایی باشند.
kill.exe ابزار برای پایان دادن به فرآیندها.
list.exe ابزاری برای نمایش محتویات یک فایل بر روی صفحه نمایش. این ابزار مینیاتوری با یک هدف همراه بود - مشاهده متن بزرگ یا فایل های گزارش. فضای کمی از حافظه را اشغال می کند، زیرا متن را در قسمت هایی بارگذاری می کند.
logger.exe یک دیباگر کوچک که فقط با یک فرآیند کار می کند. این ابزار logexts.dll را به فضای فرآیند تزریق می کند، که همه فراخوانی های تابع و سایر اقدامات برنامه مورد بررسی را ثبت می کند.
logviewer.exe ابزاری برای مشاهده گزارش های نوشته شده توسط دیباگر logger.exe.
ntsd.exe Debugger نمادین مایکروسافت NT (NTSD). اشکال زدایی که با cdb یکسان است، با این تفاوت که در هنگام راه اندازی یک پنجره متنی ایجاد می کند. مانند cdb، ntsd قادر است هم برنامه های کنسول و هم برنامه های گرافیکی را اشکال زدایی کند.
pdbcopy.exe ابزاری برای حذف نمادهای خصوصی از یک فایل نماد، کنترل نمادهای عمومی موجود در یک فایل نماد.
remote.exe ابزاری برای اشکال زدایی از راه دور و کنترل از راه دور هر دیباگر کنسول KD، CDB و NTSD. به شما امکان می دهد تمام این اشکال زداهای کنسول را از راه دور اجرا کنید.
rtlist.exe نمایشگر کار از راه دور. این ابزار برای نمایش لیست استفاده می شود فرآیندهای در حال اجرااز طریق فرآیند سرور DbgSrv.
symchk.exe ابزاری برای دانلود نمادها از سرور نماد مایکروسافت و ایجاد یک کش نماد محلی.
symstore.exe ابزار برای ایجاد یک شبکه یا ذخیره سازی محلیکاراکترها (2-tier/3-tier). فروشگاه نمادها دایرکتوری تخصصی روی دیسک است که بر اساس ساختار خاصی ساخته شده و حاوی نمادها است. در دایرکتوری ریشه نمادها، یک ساختار زیرپوشه با نام های یکسان با نام اجزا ایجاد می شود. به نوبه خود، هر یک از این زیر پوشه ها حاوی زیرپوشه های تو در تو با نام های ویژه ای است که از هش کردن فایل های باینری به دست می آیند. ابزار symstore پوشه‌های مؤلفه را اسکن می‌کند و مؤلفه‌های جدیدی را به ذخیره‌گاه نماد اضافه می‌کند، جایی که هر مشتری می‌تواند آنها را بازیابی کند. گفته می شود که symstor برای دریافت نمادها از ذخیره سازی 0-tier و قرار دادن آنها در ذخیره سازی 2-tier/3-tier استفاده می شود.
tlist.exe Task Viewer. ابزاری برای فهرست کردن تمام فرآیندهای در حال اجرا.
umdh.exe ابزار حالت کاربر dump heap. ابزاری برای تجزیه و تحلیل پشته های یک فرآیند انتخاب شده. به شما امکان می دهد گزینه های مختلفی را برای پشته نمایش دهید.
usbview.exe نمایشگر USB. ابزار برای مشاهده دستگاه های USBبه کامپیوتر متصل است.
vmdemux.exe دی مولتی پلکسر ماشین مجازی. چندین لوله با نام برای یک اتصال COM ایجاد می کند. کانال ها برای اشکال زدایی اجزای مختلف ماشین مجازی استفاده می شوند
windbg.exe حالت کاربر و دیباگر حالت هسته با رابط کاربری گرافیکی.