Windows 10 x64 WinDBG İlk Kurulumu

Kategori Belgeler, Genel
06.06.2017
4735 Okunma

Esen;
WinDBG(vindibag diye okuyoruz, vindibiciğ diyenin ağzına kürekle vuruyorlar haberiniz olsun), Microsoft’un Windows için hazırladığı debugger arayüzüdür. Microsoft Windows Driver Kiti indiridiğinizde aslında 4 tane debugger-hata ayıklama aracını sistemimize kuruyoruz: cdb, ntsd, kd, WinDBG.
* cdb ve ntsd user-mode hata ayıklama araçlarıdır ve konsolda çalışırlar. İkisi arasındaki tek fark ntsd varolan bir konsoldan çalıştırıldığında yeni bir pencerede açılır, cdb aynı pencerede çalışır.
* kd ise “kernel-mode debugger” dediğimiz hata ayıklama aracıdır ve kernel hata ayıklamasını konsolda yapar.

* WinDBG ise hem user-mode hem de kernel-mode hata ayıklama aracıdır. Ancak ikisi aynı anda değildir. Yani kernel moddaysanız artık kerneldesiniz. İkisi aynı anda olmaz. Ve WinDBG grafik kullanıcı arayüzü sunarak işlerin daha kolay ve anlaşılır olmasını sağlar.
Hangisi daha iyi sorusunun bir yanıtı yok. Çünkü 4 yazılımda “DbgEng.dll” motorunu kullanıyorlar. Hepsi aynı, sadece şekilleri farklı.(yani user-mode olanlar kendi içinde aynı, kernel mode olanlar kendi içinde aynı)

Kurulum ve Ayarlar

1. WinDBG kurulum dosyasının Windows sitesinden indirin.
2. Açılan pencereden kurulum kolunu seçin. Varsayılanı değiştirmeseniz iyi.
3. Sonra “Next”diyerek kurulumu bitirmesini bekleyelim.
4. Yönetici olarak bir “Komut Satırı – cmd.exe” açalım, sonr ada ekrana şunu yazalım:

5. Hatasız olarak ilgili dizine geldiysek şu komutu çalıştırarak *.dmp dosyalarını WinDbg ile ilişkilendirelim:

6. WinDBG açalım ve File > Symbol File Path seçelim. açılan pencereye aşağıda yazana ekleyelim:

Bu satırla birlikte C:\ sürücüsünün köküne “symbols” adında bir dizin açılacak ve debug işlemi esnasında gereken semboller internetten inecek. Ama biz burada bırakmayacağız, sembolleri “çevrimdışı”da kullanmak için onları indireceğiz:
https://developer.microsoft.com/en-us/windows/hardware/download-symbols
Bu adrese gidip biraz aşağıya inerseniz:
Windows 10 and Windows Server 2016 – April 2017
başlığını göreceksiniz. Bunu tıklayın ve altında
Windows 10, version 1703 and Windows Server 2016 symbols
yazan bir başlık daha var ve onunda altında iki indirme bağlantısı var. Bunlardan biri x64 biri x86 sistemler içindir. Ben bu yazıda x64 olan sistemi kuruyorum. Ayrıca bu işlemleri Win8 ya da Win7 için yapacaksanız ilgili bağlantıyı indirin.
Not: Windows + R tuş karışımına basıp “winver” yazarsanız açılan pencereden windows sürümünü denetleyebilirsiniz.
7. File > Save WorkSpace yaparak çalışma alanınızı kaydedin ve WinDBG’dan çıkın.
8. Aşağıdaki dosyayı indirin ve arşivi açın. İçinden çıkan test.dmp dosyasına çift tıklayın. Yukardaki adımları doğru yaptıysanız WinDBG otomatik açılacaktır. Dmp dosyasını “TenForums” siesinden indiridim.
[dm]156[/dm]
9. Eğer yukardaki gibi offline/çevrimdışı sembolleri indirmediyseniz WinDBG onları internetten çekecektir. Bu biraz sürebilir. Lütfen bekleyin. Ekranda

yazısını görmeden işlem yapmayın. Bunu gördüğünüzda işlem başarılı demektir.

Local Kernel Debugging

Kurulum tamam. Bu maddede WinDBG ile “Local Kernel Debugging” için ayarlara yer vereceğim. Windows+R yapıp “msconfig” yazıyor ve entera basıyoruz. Açılan pencere tanıdık değil mi? Burada “Boot – Önyükleme” sekmesine tıklayalım. Gelen sekmede “Advanced Options – İleri düzey Seçenekler” tuşuna tıklıyoruz. Yeni bir pencere açılacak. “Debug – Hata Ayıklama” kutucuğuna tik atıyoruz. Tamam diyip devam edelim; bilgisayarı yeniden başlatmamızı isteyecek. Makineyi yeniden başlatın. WinDBG açın; Ctrl+K ya da “File>Kernel Debug” mönüsününü seçelim. Yeni bir pencere gelecek. Burada “Local” sekmesini seçip tamam diyelim. Eğer Windows’u “DEBUG” modunda başlatmadıysanız hata alırsınız.

LiveKD aracı ile Kernel Debugging

LiveKD SysInternals sitesinde bulunan ücretsiz sistem araçlarından birisidir. En güzel yanı da sistemi “debug – hata ayıklama” modunda yeniden başlatmadan kernel debuging yapmamıza olanak sağlamasıdır. LiveKD bir komut satırı aracıdır herhangi bir dizine çıkartıp çalıştırmanız yeterli ama ben boğuşmamanız için en uygun yolu anlatıyorum:
1. LiveKD dosyasının SysInternals sayfasından indirin
2. Zip paketinin içindeki LiveKD.exe ve LiveKD64.exe dosyalarını c:\Windows\System32 dizini altına atın.
3. Bilgisayarım Sağ Tık Mönüsü Özelliklere girin “Advanced System Settings – İleri Düzey Sistem Ayarları(Windowsu ingilizce kullanıyorum)” > “Environment Variables – Ortam Değişkenleri” seçiyoruz. Yeni bir pencere açılacak.
4. O pencerede “PATH” değişkeni içerisini windbg.exe dosyamızın yolunu atıyoruz:


5. Şimdi bir komut satırını yönetici olarak açalım ve ekran şunu yazalım:

6. Windbg açılıp yüklenecek. Ekranda şöyle bir hata görebilirsiniz:
*** ERROR: Module load completed but symbols could not be loaded for LiveKdD.SYS
SysInternals sayfasında programın yazarı bunu çok dert etmememizi söylüyor. Çünlü programcı LIVEKDD.SYS için sembolleri hazır hale getirmemiş. Debugger’ı etkileyen bir durum yokmuş. Bunu özellikle belirtiyor.

Peki buraya kadar gelip okuduysan bir iki de örnek yapalım:
dt – display type komutu kullanarak bir yerel ya da global değişkeni veya bir veri türünü ekrana basabiliriz. Ör:

Kaynaklar:
[1] Windows Internals, Part 1: System architecture, processes, threads, memory management, and more (7th Edition)
[2] Install and Configure WinDBG for BSOD Analysis

Comments of this post

db43

db43
29 December 2017

Reis selamlar, WinDBG’yi hem kernel hem user-mode debuggingde kullanıyorum fakat sizin gibi 20.yy’dan beri yazılım analiz araçlarını kullanmadığım için :) ve Windows sistemlerde Unix-benzerlerine göre daha az tecrübem olmasından dolayı kd gibi araçları öğrenmeye fırsatım olmadı. WinDBG dışında bu bahsettiğiniz araçların bir artısı var mı WinDBG’ye göre?

errorinside

errorinside
20 June 2018

WinDBG haricinde yazıda belirttiğim araçların fazladan bir artısı yok. Hatta yazıda araçların hepsinin aynı DLL dosyasını kullandıklarını belirtmiştim. WinDBG grafik kullanıcı arayüzü kullandığı için daha çok seçiliyor. WinDBG ile örnek hazırlamam gerekiyor konunun daha anlaşılır olması için, bende bunun ayırdındayım.