windbg, bir döküm dosyası için hangi işletim sistemi sembollerini indireceğini belirler

Bir döküm dosyası analizi yaptığımda, Microsoft simge sunucusuna işaret etmek için sembol yolunu ayarlıyorum. Windbg, çöp kutusunun hangi işletim sistemi altında oluşturulduğunu ve bu işletim sistemi için doğru sembolleri nasıl indirdiğini nasıl biliyor?

0

1 cevap

To match symbols to binary, WinDbg looks at the thing called Debug Directories. Debug Directories are sections in PE modules (which is a file format used by Windows for all types of executables). Debug Directories simply contain links to types of debug information. If you type command in cmd window link /dump /headers , it will print out something like this:

...
Debug Directories

    Time Type       Size      RVA  Pointer
-------- ------ -------- -------- --------
4CC78FB1 cv           22 00102588   101988    Format: RSDS, {30976E0B-FBF7-45EF-8608-99932F2B791F}, 2, ntdll.pdb
4CC78FB1 (   A)        4 00102584   101984    BB03197E

...

Bu ntdll.dll için çıktı. CV (CodeView için) hata ayıklama bilgisinin ntdll.pdb dosyasında bulunduğunu ve bu PDB'nin GUID'inin bağlantıdaki biriyle eşleşmesi gerektiğini görebilirsiniz. Bu GUID her modül için derleme zamanında rastgele oluşturulur.

WinDbg'deki ! Lmi komutu, bu bilgileri farklı biçimde de bırakacaktır.

Sembol sunucusundan sembol yüklerken WinDbg ne yapar? GUID ile eşleşen 'ntdll.pdb' adlı dosyayı almak için sembol sunucusuna istek gönderir.

2
katma
Her PE modülün kendi sembol dosyası vardır. OS, "OS için semboller" diye bir şey yoktur, çünkü OS, farklı hizmet paketlerinden, yamalardan, düzeltme giderlerinden, özel ikili dosyalardan, vb. Bir sürüm karışımından oluşur.
katma yazar seva titov, kaynak
Yine, "OS sembolleri" yoktur, belirli PE modülü için semboller vardır. Dump, işlem adres boşluğuna halihazırda eşlenmiş olan modüllerin listesini içerir. Kernel32.dll farklı sürümleri vardır - farklı işletim sisteminin işlemci mimarileri için, daha fazla sürüm farklı OS yamaları ile gelir. Hata ayıklayıcının kernel32.dll için sembolleri çözmesi gerektiğinde, başlangıçta yüklenen zaman modülündeki yükleyici tarafından oluşturulan modül bilgi yapısına bakar. Bu bilgi Debug Directory dahil olmak üzere PE görüntüsünden bazı bölümler içerir.
katma yazar seva titov, kaynak
Bu bilgi meclislerin içine gömülmüş PE modüllerinin bir parçası mı demek istiyorsun? Bir uygulama oluşturduğumda, farklı Hizmet paketleri ile farklı işletim sistemlerinde çalıştırabilirim. Uygulamanın kendisi farklı işletim sistemlerinde çalışırken PE modülünde saklanan bu bilginin nasıl kullanılacağı konusunda kafam karıştı.
katma yazar Silverlight Student, kaynak
Uygulama montajının Vista'da derlenmesini söyleyelim. Windows 7 ve Windows Server 2008 için başka bir dosya için bir dökümü oluşturuyorum. Bu durumda, PE modülü Vista için bir kimlik alacak, doğru mu? Bu durumda, Windows 7 ve 2008 için iki dökümün sembolleri nasıl olacak?
katma yazar Silverlight Student, kaynak