Aracılığıyla paylaş


Montaj Modunda Hata Ayıklama

Uygulamanız için C veya C++ kaynak dosyalarınız varsa, kaynak modunda hata ayıklamahata ayıklayıcısını çok daha güçlü bir şekilde kullanabilirsiniz.

Ancak, birçok kez kaynak hata ayıklaması gerçekleştiremezsiniz. Uygulamanızın kaynak dosyalarına sahip olmayabilirsiniz. Başka birinin kodunda hata ayıklayabilirsiniz. Yürütülebilir dosyalarınızı tam .pdb simgeleriyle oluşturmamış olabilirsiniz. Uygulamanızda kaynak hata ayıklaması yapsanız bile, uygulamanızın çağırdığını veya uygulamanızı yüklemek için kullanılan Microsoft Windows yordamlarını izlemeniz gerekebilir.

Bu gibi durumlarda derleme modunda hata ayıklamanız gerekir. Ayrıca, derleme modu kaynak hata ayıklamada bulunmayan birçok yararlı özelliğe sahiptir. Hata ayıklayıcı, bellekteki konumlarının ve kayıtların içeriklerini erişildikçe otomatik olarak görüntüler ve program sayacının adresini gösterir. Bu görüntü, derleme hata ayıklamasını kaynak hata ayıklama ile birlikte kullanabileceğiniz değerli bir araç haline getirir.

Ayrıştırma Kodu

Hata ayıklayıcı öncelikle ikili yürütülebilir kodu analiz eder. Hata ayıklayıcısı bu kodu ham biçimde görüntülemek yerine bu kodu. Yani, hata ayıklayıcı kodu makine dilinden derleme diline dönüştürür.

Elde edilen kodu (ayrıştırma koduolarak bilinir) çeşitli yollarla görüntüleyebilirsiniz:

  • u (Unassemble) komutu ayrıştırılarak makine dilinin belirtilen bir bölümünü görüntüler.

  • uf (Unassemble function) komutu ayrıştırılarak bir işlev görüntüler.

  • yukarı (Fiziksel Bellekten Ayrıştır) komutu, fiziksel bellekte depolanan makine dilinin belirtilen bir bölümünü ayırır ve görüntüler.

  • (Gerçek Mod BIOS'unu Çöz) komutu ayrıştırılarak belirtilen 16 bit gerçek mod kodunu görüntüler.

  • ux (Unassemble x86 BIOS) komutu, belirtilen adresteki x86 tabanlı BIOS kod yönergelerini ayrıştırır ve görüntüler.

  • (Yalnızca WinDbg) Ayrıştırma penceresi, makine dilinin belirtilen bir bölümünü parçalara ayırır ve görüntüler. penceresi menüsünde otomatik olarak ayrıştırma komutunu seçerseniz bu pencere otomatik olarak etkindir. Ayrıca, görünüm menüsünden ayrıştırma seçerek, alt+7 tuşlarına veya ayrıştırma (alt+7) düğmesine basarak da bu pencereyi açabilirsiniz.

Ayrıştırma görüntüsü dört sütunda görünür: adres uzaklığı, ikili kod, derleme dili anımsatıcısı ve derleme dili ayrıntıları. Aşağıdaki örnekte bu ekran gösterilmektedir.

0040116b    45          inc         ebp            
0040116c    fc          cld                        
0040116d    8945b0      mov         eax,[ebp-0x1c] 

Geçerli program sayacını temsil eden satırın sağındaki ekranda, erişilmekte olan bellek konumlarının veya yazmaçların değerleri gösterilir. Bu satır bir dal talimatı içeriyorsa, [br=1] veya [br=0] şeklinde bir gösterim belirir. Bu gösterim, sırasıyla, alınan veya alınmayan bir dalı belirtir.

Ayrıştırılmış yönergelerin görüntülenme biçimini değiştirmek için .asm (Ayrıştırma Seçeneklerini Değiştir) komutunu kullanabilirsiniz.

WinDbg'nin Ayrıştırma penceresinde, geçerli program sayacını temsil eden satır vurgulanır. Kesme noktalarının ayarlandığı satırlar da vurgulanır.

Derleme kodunu işlemek için aşağıdaki komutları da kullanabilirsiniz:

  • # (Ayrıştırma Desenini Ara) komutu belirli bir desen için bir bellek bölgesi arar. Bu komut, ayrıştırılmış ekranın dört sütununu aramakla eşdeğerdir.

  • bir (Assemble) komutu derleme yönergeleri alabilir ve bunları ikili makine koduna çevirebilir.

Derleme Modu ve Kaynak Modu

Hata ayıklayıcının iki farklı çalışma modu vardır: derleme modu ve kaynak modu.

Bir uygulamada tek adım atarken, tek bir adımın boyutu, moda bağlı olarak bir derleme kodu satırı veya bir kaynak kod satırıdır.

Çeşitli komutlar, moda bağlı olarak farklı veri görüntülemeleri oluşturur.

WinDbg'de Ayrıştırma penceresi derleme modunda bir uygulamayı çalıştırdığınızda veya uygulamada adım adım ilerlediğinizde otomatik olarak ön plana taşınır. Kaynak modunda kaynak Kaynak penceresi ön plana taşınır.

Modu ayarlamak için aşağıdakilerden birini yapabilirsiniz:

  • Modu denetlemek için l+, l- (Kaynak Seçeneklerini Ayarla)komutunu kullanın. l-t komutu derleme modunu etkinleştirir.

  • (Yalnızca WinDbg) Hata ayıklayıcının derleme moduna girmesine neden olmak için Hata Ayıklama menüsündeki Kaynak Modu komutunu temizleyin. Araç çubuğundaki kaynak modu kapalı düğmesini de seçebilirsiniz.

WinDbg'de, derleme modundayken durum çubuğunda ASM görünür.

WinDbg'nin Ayrıştırma penceresindeki kısayol menüsü, geçerli kaynak satırı komutundan Vurgulama yönergelerini içerir. Bu komut, geçerli kaynak satırına karşılık gelen tüm yönergeleri vurgular. Tek bir kaynak satırı genellikle birden çok derleme yönergesine karşılık gelir. Kod iyileştirildiyse, bu derleme yönergeleri ardışık olmayabilir. Geçerli kaynak satırı komutundaki Vurgulama yönergeleri, geçerli kaynak satırından derlenmiş tüm yönergeleri bulmanıza olanak tanır.

Derleme Dili Kaynak Dosyaları

Uygulamanız derleme dilinde yazılmışsa, hata ayıklayıcının ürettiği ayrıştırma özgün kodunuzla tam olarak eşleşmeyebilir. Özellikle, NO-OPs ve açıklamalar mevcut olmayacaktır.

Özgün .asm dosyalarına başvurarak kodunuzun hatalarını ayıklamak istiyorsanız kaynak modu hata ayıklamasını kullanmanız gerekir. Derleme dosyasını C veya C++ kaynak dosyası gibi yükleyebilirsiniz. Bu tür hata ayıklama hakkında daha fazla bilgi için bkz. kaynak modunda hata ayıklama .