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

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

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

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

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

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

    در هنگام خرابی، رایانه شما نیاز به ایجاد حافظه خالی دارد که بعداً به عنوان منبع اطلاعاتی برای دیباگر عمل می کند. بنابراین، مهم است که ویندوز برای ایجاد Dump پیکربندی شده باشد. برای پیکربندی سیستم عامل خود، بر روی Your computer (Computer) کلیک راست کرده و Properties (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 را ببندید و بعد از خرابی بعدی دوباره آنالایزر را اجرا کنید. شاید این اطلاعات بیشتری به شما بدهد. موفق باشید!

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

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

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


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

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

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

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

    نصب WinDBG

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

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

    در ویندوز 8، WinDBG در کیت درایور ویندوز (WDK) گنجانده شده است. می توانید Visual Studio و WDK را نصب کنید یا بسته Debugging Tools برای ویندوز 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 در مبارزات را بررسی خواهیم کرد: نقاط شکست، اشکال زدایی پله ای و مشاهده حافظه. سوئیچ نکن! جی.

    22 ژوئن 2010

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

    ویندوز 10

    آخرین نسخه Windbg برای ویندوز 7 را می توانید از لینک https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk دانلود کنید.

    ویندوز 7

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

    بسته فوق نسخه windbg 6.12 را نصب می کند. اگر می خواهید به سرعت windbg را نصب کنید، می توانید به سراغ نسخه قدیمی تر (6.11) بروید که می توانید آن را دانلود کنید.
    لینک داده شده در انتهای این پست

    پس از نصب، می توانید برنامه را در منوی استارت -> همه برنامه ها -> ابزارهای اشکال زدایی برای ویندوز -> Windbg پیدا کنید.