Hata ayıklayıcı nasıl çalışır. Linice ile Zorlu Hata Ayıklama: Çekirdek Hata Ayıklama için Çekirdek Konsolu Hata Ayıklayıcı Sembollerini Kullanmayı Öğrenme

Hata ayıklayıcı, derleyiciden sonra program oluşturmak için ikinci şeydir. Ancak, bilgisayar programları yazan ve hata ayıklayıcı kullananların çoğu, çalışmalarının ilke ve mekanizmalarından haberdar değildir.


Hata ayıklayıcı olmak zor...

Programcıların özellikle derin hata ayıklama moduna girdiklerinde gece gündüz hata ayıklayıcıyı kullandıkları gerçeği ışığında, hata ayıklayıcının bir program değil de bir donanım parçası olsaydı muhtemelen aşırı ısınıp bozulacağını söylemeye değer. Çünkü derleyicinin bile hata ayıklayıcının aldığı kadar işi yoktur.

Tabii ki, artık birçok farklı programlama dili olduğundan, her birinin hata ayıklayıcıları farklıdır. Ve elbette, bu dillerin farklı kategorileri için hata ayıklayıcıların çalışmalarında farklılıklar vardır: örneğin, yorumlanmış Ruby programları için hata ayıklayıcı, bayt koduna derlenen Java dilinden ve Java için hata ayıklayıcıdan farklı çalışır. dönüş, hata ayıklayıcı Visual C ++ 'dan farklı olacaktır.

Windows platformu için hata ayıklama hakkında konuşacağım. Bunun için hata ayıklayıcıların çalışma ilkelerini anladıktan sonra, hem POSIX sistemleri için hata ayıklayıcılarla hem de işletim sistemi düzeyinde çalışmayan hata ayıklayıcılarla, ancak bir sanal makine düzeyinde veya bir tür hata ayıklayıcılarla anlamak mümkün olacaktır. Tercüman.


Windows için Hata Ayıklayıcılar: İki Tür

Windows için temelde farklı iki tür hata ayıklayıcı vardır. Sanırım Delphi'de program yaptıklarında herkes ilk karşılaşan kişiydi (programlamadı mı? İnanması zor. Okulda ve küçük yıllarda ne programladınız?). Bunlar özel uygulama hata ayıklayıcılarıdır. Birçoğu var ve hem ayrı ayrı hem de (özellikle bu arada, sıklıkla) entegre uygulama geliştirme ortamlarının bir parçası olarak varlar. Ayrı yazılım ürünleri olarak dağıtılan hata ayıklayıcılar arasında OllyDbg geleneksel olarak ayırt edilir ve bir keresinde bunun hakkında "Bilgisayar Haberleri"nde yazmıştım.

İkinci tür hata ayıklayıcı, işletim sisteminin çekirdeğidir. Daha az sıklıkla bulunur ve kullanılırlar ve tasarımlarında özel uygulamalar için hata ayıklayıcılardan önemli ölçüde farklıdırlar. Çekirdek hata ayıklayıcılarının en ünlüsü ve aynı zamanda en iyisi SoftIce'dır. Belki de sadece duymadınız, hatta kullandınız.

İki tür hata ayıklayıcının her birinin çalışması kendine özgü özelliklere sahip olduğundan, size her biri hakkında daha fazla bilgi vereceğim.


Özel Uygulama Hata Ayıklayıcı

En kirli ve en kirli işler işletim sistemi tarafından üstlenildiğinden, özel uygulamaların hata ayıklayıcısı daha basittir. Windows, kullanıcı düzeyindeki uygulamalarda hata ayıklamak için özel programlama arabirimlerine sahiptir - bunlara Windows Hata Ayıklama API'si denir. Popüler Windows IDE'lerinde yerleşik tüm hata ayıklayıcıların kullandığı hata ayıklama API'leridir.

Hata ayıklamanın başlaması için, hata ayıklayıcının hata ayıklanan işlemi özel bir şekilde başlatması gerekir, böylece sistem bu işlemin hata ayıklama altında olacağını bilir. Bundan sonra, hata ayıklama döngüsü başlar: program, hata ayıklama olayı veya hata ayıklama olayı olarak adlandırılan belirli bir olay gerçekleşene kadar yürütülür. Bu, hata ayıklayıcının askıda kalmasını önlemek için hata ayıklama döngüsünü ayrı bir iş parçacığında çalıştırır.

Ama bu sadece başlangıç. Çünkü hata ayıklayıcının çalışmasındaki en ilginç şey, hata ayıklama olayı gerçekleştiğinde zaten başlar. Sonuçta, aslında, bir hata ayıklayıcının işi nedir? Programcının hatayı belirli bir işleve, belirli bir işleme veya belirli bir değişkene göre yerelleştirmesine yardımcı olmak için. İşletim sistemi de bu zor görevde hata ayıklayıcıya yardımcı olabilir.

Yani, bir hata ayıklama olayı meydana geldi ve sonra bunun program metniyle nasıl ilişkili olduğunu bir şekilde bulmamız gerekiyor. Bu, yalnızca programın kendisi özel hata ayıklama bilgileri içeriyorsa mümkündür - bir hata ayıklama sembolleri tablosu. Adresler ve işlev adları, veri türleri, kod satır numaraları arasındaki yazışmalar hakkında bilgi içerir. Her Windows programcısının aşina olduğu hata ayıklamanın mümkün olduğu onlar sayesinde. Sembol tablolarının farklı biçimleri vardır ve bu nedenle bir satıcının derleyicisi tarafından derlenen bir programın hatalarını başka bir satıcının hata ayıklayıcısıyla ayıklamak her zaman mümkün değildir. Ancak yine de en yaygın biçim belirtilebilir - bu PDB'dir (Program Veritabanı) ve elbette Microsoft tarafından geliştirilmiştir.

Bu nedenle, hata ayıklama simgesi tablosu PDB biçimindeyse, Microsoft'un özel bir aracı olan simgesel hata ayıklama işlemcisini kullanabilirsiniz. Bir zamanlar sistem çekirdeğinin bir parçasıydı ve Imagehlp.dll olarak adlandırılıyordu, ancak uzun zaman önce ayrı bir kitaplığa ayrılmıştı. Sembolik işlemci, belirli bir adresteki en yakın açık işlevi veya global değişkeni ve ayrıca bu satırın bulunduğu kaynak dosyanın satır numarasını ve adını bulmanızı sağlar. Ters işlemler de desteklenir, örneğin bir işlevin adresini adıyla bulma.

Bu, elbette, özel bir uygulama hata ayıklayıcısının yaptığı tüm işler değildir. Örneğin, çok iş parçacıklı uygulamalarda hata ayıklarken, iş parçacıklarının etkileşimiyle ilgili çok ince pek çok sorun vardır. Hizmetler gibi nispeten basit şeylerde hata ayıklarken bile nüanslar vardır.

Ancak şimdi nüanslar üzerinde durmayacağız - makalenin sonunda size onlar hakkında nerede okuyacağınızı söyleyeceğim. Şimdilik, çekirdek hata ayıklayıcılarına bir göz atalım.


Çekirdek hata ayıklayıcı

Çekirdek hata ayıklayıcıları, özel uygulama hata ayıklayıcılarından çok daha karmaşık programlardır ve sanırım bunun nedeni anlaşılabilir: bir işletim sistemi yardımcısına sahip değiller. Bu durumda o onların müşterisidir, çünkü nihayetinde hata ayıklamaları gereken kişi odur.

Çoğu çekirdek hata ayıklayıcısının çalışması için boş bir modem kablosuyla bağlı iki bilgisayar gerekir. Boş modem, iki bilgisayarı doğrudan COM veya LTP bağlantı noktaları üzerinden bir kabloyla bağlamanın bir yoludur. İkinci bilgisayara ihtiyaç vardır, çünkü hata ayıklayıcının ilkinde (hata ayıklanan sistemin kurulu olduğu bilgisayarda) oturan kısmı vardır. Sınırlı erişim donanıma ve bu nedenle tüm veri çıkışı boş modemden ikinci bilgisayara gider.

Intel x86 mimarisinin modern işlemcilerinde özel hata ayıklama kayıtları vardır (hem eski 368'de hem de daha yeni işlemci modellerinde bunlardan sadece sekiz tanesi vardır, bunlara DR0-DR7 denir). Bu kayıtlar, hata ayıklayıcının kontrol noktaları G / Ç bağlantı noktalarının yanı sıra belleği okumak ve yazmak için. Genel olarak, her şey tam olarak böyle görünüyor ve şimdi her bir hata ayıklama kaydının neden sorumlu olduğunu, kesme noktalarını uygulamak ve diğer benzer bilgileri vermek için hangi kesintilerin kullanıldığını ayrıntılı olarak açıklamaya değer olduğunu düşünmüyorum. Windows için belirli mevcut çekirdek hata ayıklayıcıları hakkında konuşmayı tercih ederim.

Her şeyden önce, işletim sisteminin tam çekirdeğine yerleştirilmiş bir hata ayıklayıcıdır. Windows 2000'den başlayarak tüm NT işletim sistemlerinde mevcuttur. NTOSKRNL.EXE dosyasının bir parçasıdır ve BOOT.INI'de işletim sistemi için "/ Debug" seçeneği ayarlanarak etkinleştirilebilir. Bu hata ayıklayıcının boş bir modem bağlantısına ve aynı işletim sistemine sahip ikinci bir bilgisayara ihtiyacı var.

Microsoft'tan başka bir çekirdek hata ayıklayıcı var - WinDBG. Açıkçası, bu bir çekirdek hata ayıklayıcı değil, kullanıcı düzeyindeki uygulamalarda da hata ayıklamak için kullanılabilecek bir karma hata ayıklayıcıdır. Çekirdeğe yerleşik hata ayıklayıcıdan farklı olarak, grafik bir kabuğa sahiptir ve bu nedenle kullanımı daha kolaydır. Bu hata ayıklayıcı, bazı hata ayıklama görevleri için yararlı olabilecek özel uzantıları da destekler. Ancak aynı zamanda çekirdeğin hatalarını ayıklamak için iki bilgisayar gerektirir.

Ancak, tek bir bilgisayarda hata ayıklayabilen bir çekirdek hata ayıklayıcısı vardır. Bu SoftIce. Aynı zamanda SoftIce, uygulama programlarında da hata ayıklayabilir. Bu hata ayıklayıcının kullanıcı programları için kullanılması, örneğin sistem zamanlayıcısına bağlı gerçek zamanlı sistemlerde hata ayıklama durumunda haklıdır. Sıradan bir hata ayıklayıcı ile hata ayıklarsanız, program doğru çalışıyor olsa bile sonuç yanlış olabilir ve SoftIce hem programı hem de zamanlayıcıyı durdurur. Bu, çok iş parçacıklı uygulamalarda hata ayıklarken kullanışlıdır. Ek olarak, SoftIce, sistemdeki tüm iş parçacıkları hakkında, çok iş parçacıklı uygulamalar için iş parçacığı senkronizasyonu hakkında, tutamaç "ah ... hakkında bilgi görüntülemek için çok, çok iyi gelişmiş araçlara sahiptir ... Bu hata ayıklayıcının tek dezavantajı, bir uygulama programcısı için karmaşıklığıdır. Ancak çekirdek hata ayıklayıcılarından en basit ve en etkili olanıdır.


en meraklısı için

Şimdi, elbette, Windows uygulamaları için hata ayıklayıcılardan bahsetmek, on yıl önce olduğu kadar alakalı değil. Tüm dünya İnternet ile ilgilenmeye başladı ve SoftIce'ın ana kullanıcıları korsanlık alanında krakerler, yorulmak bilmeyen işçilerdi. Ancak, bu çok kötü değil. SoftIce ile iletişim kuşkusuz bir kişiyi bilgisayar bilgisi açısından geliştirir, ancak tabii ki sadece hata ayıklayıcılarla iletişim kurarsanız ve gerçek insanlarla iletişim kurmazsanız, bazı yan etkiler mümkündür.Eh, sanırım herkes bunu zaten tahmin ediyor.

Hata ayıklayıcılar, oradaki en belirgin yazılım türlerinden bazılarıdır, ancak geliştirme açısından, kullanıcı düzeyinde hata ayıklayıcılar bile oldukça karmaşıktır. Ancak yine de kendi hata ayıklayıcınızı geliştirme arzunuz ve zamanınız varsa, işletim sistemleri ve programlama bilginiz önemli ölçüde artacaktır, bu da yüksek ücretli bir iş bulma şansınızın da artacağı anlamına gelir.

Bu nedenle, kendi hata ayıklayıcınızı oluşturmak istiyorsanız, önce bu konuyla ilgili materyalleri okumalısınız. Bence başlamak için en iyi yer John Robbins'in Windows Uygulamalarında Hata Ayıklama kitabıdır. Zaten eski, 2001'de yayınlandı, ancak içerdiği bilgiler genel, hatta biraz temel bir karaktere sahip olduğu için hala geçerli. Bu kitap, Windows için hata ayıklayıcı yazma örnekleri içerir ve ayrıca bir C++ programcısıysanız ve özel durum işlemeyi daha iyi anlamak istiyorsanız kullanışlıdır. Aslında makalede sunulan hata ayıklayıcılarla ilgili bilgileri bu kitaptan aldım. Bu kitabı bulamazsanız (sonuçta zaten oldukça eski), işinize yarayabilecek birkaç adres var. İlki şöyle: www.xakep.ru/post/19158/default.asp. "Hacker" dergisindeki bu makale, çekirdek hata ayıklayıcılarından benim yaptığımdan biraz daha fazla bahsediyor ve ayrıca basit bir hata ayıklayıcının kodunu içeriyor. Kalashnikoff.ru/Assembler/issues/016.htm adresinde bir DOS hata ayıklayıcısının nasıl yazılacağını öğrenebilirsiniz. Ancak, elbette, en iyisi MSDN'yi okumak ve yol boyunca bir açık kaynak hata ayıklayıcı bulmaktır. Ve elbette, bir hata ayıklayıcı yazmaya başladıysanız, bu zor görevde başarı!

Bu makale dizisi iki nedenden dolayı ortaya çıktı. İlk olarak, projeyle çalışmayı seviyorum HackSysExtremeVulnerableDriver... İkincisi, aldım bir sürü dilek Bu konuyu vurgulamak için.

Bu seriyi yazarken kullanılan tüm kodlar benim depomda.

Bu makale dizisinde, Windows'ta çekirdek düzeyinde açıklar yazmaya bakacağız. Bilinen güvenlik açıklarıyla uğraşacağımızı ve tersine mühendisliğe (en azından sürücü için) gerek olmadığını belirtmek önemlidir.

Tüm makaleleri okuduktan sonra, en yaygın güvenlik açığı sınıfları ve yararlanma yöntemlerine aşina olmanız, ayrıca açıklardan yararlanmaları x86 mimarisinden x64 mimarisine (mümkünse) aktarabilmeniz ve kendinizi tanımanız beklenmektedir. Windows 10'da yeni koruma yöntemleri.

Çekirdek hata ayıklama şeması

Kullanıcı düzeyinde hata ayıklamanın aksine, tek bir işlemin yürütülmesi askıya alındığında, çekirdek düzeyinde tüm sistem söz konusudur ve bu yöntemi kullanamayız. Buna göre, çekirdeğin hata ayıklandığı sistemle iletişim kurabilen, bellek ve çekirdek yapılarını görüntüleyebilen ve sistem çökmelerini yakalayan ayrı bir hata ayıklama makinesine ihtiyaç vardır.

Keşfedilecek ek materyal:

Çekirdek güvenlik açıklarından yararlanma

Bu süreç, kullanıcı J düzeyinde sömürüden çok daha eğlencelidir.

Ana amaç, çekirdek bağlamında ayrıcalıklı yürütme elde etmektir. Ve sonra, ev yapımı bira ile bir ziyafetten devlet destekli kötü amaçlı yazılımların tanıtımına kadar her şey hayal gücümüze bağlıdır.
Genel olarak, görevimiz sistem ayrıcalıklarına sahip bir kabuk elde etmektir.

Bu serinin konuları

  • Bölüm 1: Bir çalışma ortamının kurulması
    • Üç sanal makine ve hata ayıklayıcı görevi görecek bir sistem yapılandırma.
    • WinDBG Hata Ayıklayıcısını Yapılandırma.
  • Bölüm 2: Yükler
    • En yaygın yükleri incelemek. Sonraki bölümler belirli güvenlik açıklarını ele alacak ve uygun olduğu şekilde bu makaleye bağlantılar sağlayacaktır.
  • Parçaların geri kalanı.
    • Güvenlik açıklarının dikkate alınması.

Çekirdek düzeyinde yararlanma geliştirme yaşam döngüsü

  • Güvenlik açığını bulma... Deliklerin tam olarak nerede olduğunu zaten bildiğimiz için bu konu bu seride ele alınmayacaktır.
  • Yürütme iş parçacığının durdurulması... Bazı güvenlik açıkları kod yürütmeyi içerir, bazılarının ek gereksinimleri vardır.
  • Ayrıcalıkların genişletilmesi... Ana amaç, sistem ayrıcalıklarına sahip bir kabuk elde etmektir.
  • Yürütme akışını geri yükleme... Çekirdek düzeyinde sayılamayan istisnalar sistemin çökmesine neden olur. Bir DoS istismarı yazmayacaksanız, bu gerçek dikkate alınmalıdır.

Hedef sistem türleri

Aşağıdaki sistemlerdeki güvenlik açıklarıyla çalışacağız (belirli sürüm önemli değil):

  • Win7 x86 sanal makine
  • Win7 x64 sanal makine
  • Win10 x64 VM

x86 mimarisiyle başlayalım ve ardından açıklardan yararlanmayı Win7 x64 sistemine taşıyacağız. Mevcut yeni korumalar nedeniyle bazı istismarlar Win10 makinelerinde çalışmayacaktır. Bu durumda ya istismarın mantığını değiştireceğiz ya da tamamen farklı bir yaklaşım kullanacağız.

Kullanılan yazılım:

  • Hipervizör (birçok seçenek).
  • Windows 7 x86 sanal makine
  • Windows 7 x64 sanal makine
  • Windows 10 x64 sanal makine

Hata ayıklama için sistemlerin kurulması

Etkileşim kuracağımız hata ayıklama sistemleri, savunmasız bir sürücüyü yüklemek için tasarlanmıştır. Çoğu çekirdek istisnası bu tür davranışlara katkıda bulunduğundan, bu makineler sık ​​sık çökecektir. Yeterince tahsis etmek gerekiyor rasgele erişim belleği bu sistemler için.

Hata ayıklanacak her makinede aşağıdakileri yapmanız gerekir:

  • VirtualKD dizini içinde target\vminstall.exe dosyasını çalıştırın. Yeni bir önyükleme kaydı eklenecek ve hata ayıklanacak ve otomatik bağlantı hata ayıklayıcı görevi gören sistemde kurulu VirtualKD sunucusuna.

Windows 10 VM durumunda, yüklemeye izin veren test imzalama modunu etkinleştirmek gerekir. imzasız sürücülerçekirdeğe.

Komutta bcdedit / set testing'i çalıştırdıktan ve yeniden başlattıktan sonra, masaüstünde “Test Modu” belirir.

HEVD modülünün kısa açıklaması

DriverEntry prosedürü, her sürücü için başlatma prosedürüdür:

NTSTATUS DriverEntry (PDRIVER_OBJECT DriverObject IN, PUNICODE_STRING RegistryPath IN) (
UINT32 ben = 0;
PDEVICE_OBJECT DeviceObject = BOŞ;
NTSTATUS Durumu = STATUS_UNSUCCESSFUL;
UNICODE_STRING CihazAdı, DosDeviceName = (0);

UNREFERENCED_PARAMETER (Kayıt Yolu);
PAGED_CODE();

RtlInitUnicodeString (& DeviceName, L "\\ Device \\ HackSysExtremeVulnerableDriver");
RtlInitUnicodeString (& DosDeviceName, L "\\ DosDevices \\ HackSysExtremeVulnerableDriver");

// cihazı oluştur
Durum = IoCreateDevice (DriverObject,
0,
& Cihaz adı,
FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SECURE_OPEN,
YANLIŞ,
& DeviceObject);

  • Bu prosedür, iletişim sırasında kullanacağımız sürücü adını içeren IoCreateDevice işlevine yapılan bir çağrıyı içerir.
  • Gerekli yapılar ve işlev işaretçileri DriverObject'e eklenecektir.
  • Bizim için önemli olan, IOCTL'nin (G/Ç Kontrolü; G/Ç kontrolü) işlenmesinden sorumlu olan DriverObject-> MajorFunction prosedürü ile ilişkili fonksiyon işaretçisidir;
  • HEVD, her IOCTL için birçok şubesi olan büyük bir koşullu ifade olan bu işlevi IrpDeviceIoCtlHandler olarak adlandırır. Her güvenlik açığının benzersiz bir IOCTL'si vardır.

Örnek: HACKSYS_EVD_IOCTL_STACK_OVERFLOW, yığın taşması güvenlik açığını etkinleştirmek için kullanılan bir IOCTL'dir.

Bu, ilk bölümü tamamlar. Bir sonraki yazıda payloadlardan bahsedeceğiz. Üzerinde şu an sadece üçüncü bölümde kullanılacak olan token çalma yükü mevcuttur.

not Karşılaşabileceğiniz birçok incelik ve sorun olduğunu anlıyorum. Bu döngü, açıklardan yararlanma geliştirmeye odaklandığından, ilgili tüm sorunları kendiniz çözmeniz gerekecektir. Ancak aklınıza takılan tüm soruları yorumlarda sorabilirsiniz.

Tanıtım

1. Windows hata ayıklayıcı türleri

2. Kullanıcı Modu Hata Ayıklayıcıları

3. Çekirdek modu hata ayıklayıcıları

3.1 Hata Ayıklayıcı WDEB386

3.2 I386KD hata ayıklayıcı

3.3 DBG Hata Ayıklayıcısını Kazanın

3.4 SoftICE Hata Ayıklayıcı

4. Genel hata ayıklama sorusu

5. Hata ayıklayıcıda uygulamaların otomatik başlatılması

5.1 Kesinti kısayolları

Çözüm

Edebiyat

Tanıtım

Yazılım araçlarının nasıl çalıştığını öğrenmek, hata ayıklama sürecinin en zor kısmıdır. Yalnızca araçların yeteneklerini ve sınırlarını anlayarak onlardan daha fazlasını elde edebilir ve hata ayıklamaya daha az zaman harcayabilirsiniz. Hata ayıklayıcılar genellikle son derece faydalıdır, ancak programcının kafasını karıştıran oldukça ince sorunlara yol açabilir. Bu bölüm, hata ayıklayıcının ne olduğunu ve çeşitli hata ayıklayıcıların Win32 işletim sistemlerinde (Microsoft 32 bit Windows işletim sistemleri) nasıl çalıştığını gösterir.

Bu durumda, genel olarak hata ayıklayıcıların, bir program işlemi ikincisinin kontrolü altında yürütüldüğünde etkinleştirilen özel özelliklerine odaklanacağız. Ayrıca hata ayıklamayı kolaylaştırmak için 32 bit Windows işletim sistemlerinin bazı özelliklerinden nasıl yararlanılacağını da açıklar. Kaynak kodu eşlik eden CD'de bulunabilecek iki özel hata ayıklayıcı sunulacak. İlki (MinDBG), hata ayıklayıcı olarak adlandırılmak için yeterli yeteneğe sahiptir. İkincisi (WDBG), sembol tablolarını manipüle etme, kesme noktalarını işleme, ayrıştırıcı kodu oluşturma ve bir grafik kullanıcı arabirimi (GUI) ile koordinasyon dahil olmak üzere gerçek bir sistem hata ayıklayıcısının yaptığı hemen hemen her şeyi yapan bir Microsoft Windows hata ayıklayıcı örneğidir. WDBG'yi tartışırken, size kesme noktalarının nasıl çalıştığını göstereceğiz ve çeşitli sembol dosyalarının ne olduğunu tartışacağız.

Bu bölümün ana malzemesine geçmeden önce, bu kitap boyunca sıklıkla kullanılacak iki standart terimi tanımlayalım: ana (veya temel) hata ayıklayıcı ve alt hata ayıklayıcı (hata ayıklayıcı). Basit bir ifadeyle, ana hata ayıklayıcı başka bir işlemin hatalarını ayıklayabilen bir işlemdir, alt hata ayıklayıcı ise ana hata ayıklayıcının altında çalışan bir işlemdir. Bazı işletim sistemlerinde, ana hata ayıklayıcıya üst süreç, alt hata ayıklayıcıya da alt süreç adı verilir.

Hata ayıklayıcı (hata ayıklayıcı, hatadan İngilizce hata ayıklayıcı) - bilgisayar programı, diğer programlardaki, işletim sistemi çekirdeklerindeki, SQL sorgularındaki ve diğer kod türlerindeki hataları bulmak için tasarlanmıştır. Hata ayıklayıcı, kod yürütme sırasında değişkenlerin değerlerini izlemenize, izlemenize, ayarlamanıza veya değiştirmenize, kesme noktalarını ayarlamanıza ve kaldırmanıza veya koşulları durdurmanıza vb.

Çoğu geliştirici, kullanıcı modu hata ayıklayıcılarına daha aşinadır. Bu mod hata ayıklayıcısının kullanıcı modu uygulamalarında hata ayıklamak için tasarlanmış olması şaşırtıcı değildir. Kullanıcı modu hata ayıklayıcısının başlıca örneği hata ayıklayıcıdır Microsoft Görsel C++. Çekirdek modu hata ayıklayıcıları, adından da anlaşılacağı gibi, bir işletim sisteminin çekirdeğinde hata ayıklamanıza izin veren hata ayıklayıcılardır. Öncelikle aygıt sürücüleri yazan (ve elbette hata ayıklayan) kişiler tarafından kullanılırlar.

2. Kullanıcı Modu Hata Ayıklayıcıları

Kullanıcı modu hata ayıklayıcıları, GUI programları ve yerel olmayanlar dahil olmak üzere kullanıcı modunda çalışan herhangi bir uygulamada hata ayıklamak için tasarlanmıştır. düzenli uygulamalar Windows 2000 hizmetleri gibi.Genel olarak, bu tür hata ayıklayıcı bir grafik kullanıcı arabirimini (GUI1) destekler. Bu hata ayıklayıcıların ana özelliği, Win32 Hata Ayıklama Uygulama Programlama Arayüzü'nü (Debug API) kullanmalarıdır. İşletim sistemi bağımlı hata ayıklayıcıyı "özel modda çalışıyor" olarak işaretlediğinden, işleminizin hata ayıklayıcı altında çalışıp çalışmadığını belirlemek için IsDebuggerPresent API'sini kullanabilirsiniz.

Win32 hata ayıklama API'sini gönderirken, kural, bir işlem hata ayıklama API'si altında çalıştığında (ve böylece onu bir alt işlem haline getirdiğinde), ana hata ayıklayıcının işlemden ayrılamamasıdır. Bu simbiyotik ilişki, ana hata ayıklayıcı çıkarsa alt hata ayıklayıcının da çıkacağı anlamına gelir. Ana hata ayıklayıcı, yalnızca alt hata ayıklayıcının ve onun ürettiği tüm süreçlerin hatalarını ayıklamakla sınırlıdır (ana hata ayıklayıcı alt süreçleri destekliyorsa).

GUI - Grafiksel Kullanıcı Arayüzü. - Per.

Sanal makine yaklaşımını kullanan yorumlanmış diller ve çalışma zamanı sistemleri için eksiksiz bir hata ayıklama ortamı sağlanır. Sanal makineler ve Win32 hata ayıklama API'sini kullanmazlar. Bu tür ortamların bazı örnekleri şunlardır: Microsoft veya Sun'dan Java sanal makineleri (JVM'ler), Microsoft'tan Web uygulamaları için komut dosyası oluşturma ortamı ve Microsoft Visual Basic'te p-kodu yorumlayıcı.

hata ayıklayıcı çekirdek işletim sistemi

Bölüm 7'de Visual Basic'te hata ayıklamaya başlayacağız, ancak Visual Basic p-kodu arabiriminin belgelenmediğini unutmayın. Java ve komut dosyası hata ayıklama arayüzlerine girmeyeceğiz, bu konular bu kitabın kapsamı dışındadır. Microsoft JVM'de hata ayıklama ve profil oluşturma hakkında daha fazla bilgi için bkz. MSDN'de Java Uygulamalarında Hata Ayıklama ve Profil Oluşturma. Bu tür arabirimler kümesi çok zengin ve çeşitlidir ve JVM'nin çalışmasını tamamen kontrol etmenize olanak tanır. Komut dosyası hata ayıklayıcı yazma hakkında bilgi için, "Aktif Komut Dosyası Hata Ayıklama API Nesneleri" başlıklı MSDN konusuna bakın. JVM gibi, komut dosyası hata ayıklayıcı nesneleri, komut dosyası erişimi ve belgeleri için zengin bir arabirim sağlar.

Şaşırtıcı derecede çok sayıda program Win32 Hata Ayıklama API'sini kullanır. Bunlar şunları içerir: Bölüm 5 ve 6'da ayrıntılı olarak ele alınan Visual C ++ hata ayıklayıcı; Bir sonraki bölümde (çekirdek modu hata ayıklayıcısında) tartışılan Windows Hata Ayıklayıcı (WinDBG); Compuware NuMega'dan BoundsChecker yazılımı; Platform programı SDK HeapWalker; Platform SDK'sı Programa Bağlıdır; Borland Delphi ve C ++ Builder hata ayıklayıcıları ve NT Sembolik Hata Ayıklayıcı (NTSD). Eminim daha birçokları vardır.

3. Çekirdek modu hata ayıklayıcıları

Çekirdek modu hata ayıklayıcıları, CPU ile işletim sistemi arasında bulunur. Bu, çekirdek modu hata ayıklayıcısını durdurduğunuzda işletim sisteminin de tamamen durduğu anlamına gelir. Zamanlayıcı ve zamanlama sorunlarıyla çalışırken işletim sisteminin aniden durdurulmasının yararlı olduğunu anlamak zor değil. Ancak, aşağıda tartışılacak olan bir hata ayıklayıcı dışında (bu bölümün SoftlCE Hata Ayıklayıcı bölümünde), çekirdek modu hata ayıklayıcılarını kullanarak kullanıcı modu kodunda hata ayıklayamazsınız.

Pek çok çekirdek modu hata ayıklayıcısı yoktur. Bunlardan bazıları şunlardır: Windows 80386 Hata Ayıklayıcı (WDEB386), Çekirdek Hata Ayıklayıcı (1386KD), WinDBG ve SoftlCE. Bu hata ayıklayıcıların her biri aşağıdaki bölümlerde kısaca açıklanmıştır.

3.1 Hata Ayıklayıcı WDEB386

WDEB386, Platform SDK ile dağıtılan bir Windows 98 çekirdek modu hata ayıklayıcısıdır. Bu hata ayıklayıcı yalnızca sanal sürücüler yazan geliştiriciler için kullanışlıdır. Windows cihazları 98 (VxD). Windows işletim sistemleri için çoğu çekirdek modu hata ayıklayıcısında olduğu gibi, WDEB386 hata ayıklayıcısının çalışması için iki makine ve bir boş modem kablosu gerekir. Hedef makinede çalışan hata ayıklayıcının parçasının donanımına sınırlı erişimi olduğundan iki makineye ihtiyaç vardır, bu nedenle çıktısını gönderir ve diğer makineden komutlar alır.

WDEB386 hata ayıklayıcısının sahip olduğu ilginç hikaye... Windows 3.0 döneminde dahili bir Microsoft arka plan aracı olarak başladı. Kullanımı zordu ve hata ayıklama için yeterli desteği yoktu. kaynak kodu ve Visual C ++ ve Visual Basic hata ayıklayıcılarının bizi şımarttığı diğer güzel özellikler.

Nokta komutları, WDEB386'nın en önemli özelliğidir. INT 41 kesmesi, komut eklemek üzere WDEB386'yı genişletmek için kullanılabilir. Bu genişletilebilirlik, VxD sürücü yazarlarının sanal cihazlarındaki bilgilere ücretsiz erişim sağlayan özel hata ayıklama komutları oluşturmasına olanak tanır. hata ayıklama Windows sürümü 98, hata ayıklama sürecinin herhangi bir noktasında işletim sisteminin tam durumunu gözlemlemenize izin veren birçok DOT komutunu destekler.

3.2 I386KD hata ayıklayıcı

Windows 2000, Windows 98'den çekirdek modu hata ayıklayıcısının asıl bölümünün NTOSKRNL'nin bir parçası olması bakımından farklıdır. EXE - ana işletim çekirdek dosyası Windows sistemleri 2000. Bu hata ayıklayıcı, hem ücretsiz (sürüm) hem de doğrulanmış (hata ayıklama) işletim sistemi yapılandırmalarında mevcuttur. Çekirdek modu hata ayıklamasını etkinleştirmek için / DEBUG önyükleyici parametresini BOOT olarak ayarlayın. Çekirdek modu hata ayıklayıcı iletişim bağlantı noktasını varsayılandan (COM1) başka bir şeye ayarlamak istiyorsanız, INI ve isteğe bağlı olarak / DEBUGPORT önyükleyici seçeneği. I386KD kendi makinesinde çalışır ve aşağıdakilerle iletişim kurar: Windows makinesi 2000, boş bir modem kablosuyla.

Çekirdek modu hata ayıklayıcı NTOSKRNL. EXE, işletim sisteminin hatalarının ayıklanabilmesi için yalnızca CPU'yu denetlemek için yeterlidir. Hata ayıklama çalışmalarının çoğu - sembol işleme, genişletilmiş kesme noktaları ve sökme - 1386KD tarafında yapılır. Bir zamanlar, Windows NT 4 Device Driver Kit (DDK), boş modem kablolarında kullanılan protokolü belgeledi. Ancak, Microsoft artık bunu belgelemiyor.

1386KD'nin gücü, dahili sisteme erişmek için sunduğu tüm komutlara baktığınızda açıktır. Windows durumu 2000. Windows 2000'de aygıt sürücülerinin nasıl çalıştığını bilmek, programcının birçok komutun çıktısını takip etmesine yardımcı olacaktır. Tüm gücüne rağmen, i386KD, kaynak düzeyinde hata ayıklama için kullanımı çok sıkıcı bir konsol uygulaması olduğu için neredeyse hiç kullanılmaz.

3.3 DBG Hata Ayıklayıcısını Kazanın

WinDBG, Platform SDK ile birlikte gelen bir hata ayıklayıcıdır. Ayrıca # "897008.files / image001.gif"> adresinden indirebilirsiniz.

Şekil 1. GFLAGS programının çıktısı. exe

Liste 4-1. Windows 2000 yığın alanının yok edilmesine bir örnek

geçersiz ana (boş)

HANDLE hHeap = HeapCreate (0, 128, 0);

// 10 baytlık bir blok için bellek ayırın.

LPVOID pMem = HeapAlloc (hHeap, 0.10);

// 10 baytlık bir bloğa 12 bayt yazın (yığın taşması).

memset (pMem, OxAC,

// 20 baytlık yeni bir blok tahsis edin.

LPVOID pMem2 = HeapAlloc (hHeap, 0, 20);

// İkinci bloğa 1 bayt yaz.

karakter * pUnder = (char *) ((DWORD) pMem2 - 1);

// İlk bloğu serbest bırak. HeapFree'ye yapılan bu çağrı

// hata ayıklama yığın kodunda bir kesme noktası başlat

// işletim sistemi.

HeapFree (hHeap, 0, pMem);

// İkinci bloğu serbest bırak. Bu aramanın olmayacağını unutmayın.

// hata mesajlarını yazdır

HeapFree (hHeap, 0, pMem2);

// Kukla bloğu serbest bırakın. Bu aramanın olmayacağını unutmayın.

// hata mesajlarını yazdır

Şekil 4.1'deki ile aynı onay kutularını seçerseniz ve HEAPER'ın yürütülmesini tekrarlarsanız. EXE, aşağıdaki, daha ayrıntılı çıktıyı alırsınız:

PAGEHEAP: işlem 0x490, hata ayıklama yığını 00430000 oluşturuldu

(0xl, 50, 25, 0, 0 bayrakları): 0x490 işlemi hata ayıklama yığını 00CF0000 oluşturdu

(Oxl, 50, 25, 0, - 0 işaretler): işlem 0x490 hata ayıklama yığını 01600000 oluşturuldu

(işaretler Oxl, 50, 25, 0, 0): Kuyruk doldurma bozulması algılandı: 0x01606FF0size 0x0000000Asize 0x00000010at Ox01606FFA: Tahsis edilmemiş referans bloğu denemesi

Liste içeriği, Global Bayraklar paneli tarafından belirlenen bayrakların adlarını açıklar.

GFLAGS programının tartışılması. EXE, çok kullanışlı bir seçeneğe dikkat çekmek istiyorum - Loader Snaps'i Göster. Bu kutuyu işaretler ve uygulamayı çalıştırırsanız, Windows 2000'in DLL'leri nereye yüklediğini ve içe aktarmaları nasıl düzenlemeye başladığını gösteren bir uygulama anlık görüntüsü olarak adlandırılan şeyi görürsünüz. Tam olarak ne yaptığını görmeniz gerekiyorsa Windows önyükleyici 2000 bir uygulama yüklerken (özellikle içinde bir sorun tespit edildiğinde), bu seçeneği etkinleştirmek çok yararlı bir önlem olabilir. Önyükleyici anlık görüntüleri hakkında daha fazla bilgi için, Eylül 1999 Microsoft Systems Journal'daki Mat Pietrec'in "Başlık Altında" sütununa bakın.

5. Hata ayıklayıcıda uygulamaların otomatik başlatılması

Hata ayıklaması en zor uygulama türleri, başka bir işlem tarafından başlatılanlardır. Bu kategori saldırıya uğradı pencere hizmetleri 2000 ve işlem dışı COM sunucuları (COM işlem dışı sunucular). Çoğu durumda, hata ayıklayıcıyı bir işleme eklemeye zorlamak için DebugBreak API'sini kullanabilirsiniz. Ancak iki durumda bu özellik çalışmayacaktır. Birincisi, bazen Windows 2000 hizmetlerinde çalışmaz.Bir hizmetin başlangıcında hata ayıklamanız gerekiyorsa, DebugBreak'i çağırmak hata ayıklayıcıyı ekleyecektir, ancak hata ayıklayıcı başladığında hizmet zaman aşımına uğramış olabilir ve Windows 2000 onu durduracaktır. . İkinci olarak, işlem dışı bir COM sunucusunda hata ayıklamanız gerektiğinde DebugBreak çalışmayacaktır. DebugBreak'i çağırırsanız, COM hata işleyicisi kesme noktası kural dışı durumunu yakalar ve COM sunucusunu sonlandırır. Neyse ki Windows 2000, uygulamanın hata ayıklayıcıda başlaması gerektiğini belirtmenize olanak tanır. Bu özellik, ilk ifadeden itibaren hata ayıklamaya başlamanıza izin verir. Ancak, bir Windows 2000 hizmeti için bu özelliği etkinleştirmeden önce, hizmetin bir çalışanla iletişim kuracak şekilde yapılandırıldığından emin olun. Windows masası 2000.

Debugger özelliği ile çalıştırma iki şekilde etkinleştirilebilir. En kolayı GFLAGS yardımcı programını çalıştırmaktır. EXE ve radyo düğmesini seçin resimDosya Seçenekler(bkz. şekil 4.1). Düzenlenebilir alana girdikten sonra büyücüDosyaİsim programın ikili dosya adının kutusunu işaretleyin hata ayıklayıcı grup içinde resim hata ayıklayıcıSeçenekler) ve bu onay kutusunun yanındaki düzenleme kutusuna hata ayıklayıcının tam yolunu girin.

Daha zor bir yol: Uygun kayıt defteri anahtarları için gerekli parametreleri manuel olarak ayarlamanız gerekir (RegEdit düzenleyicisini kullanarak). Under_LOCAL_MACHINE \ YAZILIM \ Microsoft \ Windows NTX Güncel Sürüm \ Görüntü Döşeme Yürütme Seçenekleri

uygulama dosya adınızla aynı adlı bir alt anahtar oluşturun. Örneğin, uygulama adı FOO ise. EXE, ardından kayıt defteri alt anahtarının adı da FOO'dur. EXE. Bu alt bölümde, Debugger adlı yeni bir dize parametresi oluşturun. Dize Parametresini Değiştir iletişim kutusunda, klavyeyi kullanarak seçtiğiniz hata ayıklayıcının tam (dizin yolu ile birlikte) dosya adını girin. GFLAGS'ı belirttiyseniz. EXE ve bazı genel seçenekler yüklediğinizde, uygulamanızın anahtarında küçük GiobaiFiag değerini fark edebileceksiniz.

Artık, uygulamanızı başlattığınızda, hata ayıklayıcı da otomatik olarak yüklenir ve başlatılır. Seçenekler Komut satırı hata ayıklayıcı için, Hata Ayıklayıcı dize parametresinde de belirtilebilir (hata ayıklayıcı programının adından sonra). Örneğin, WinDBG hata ayıklayıcısını kullanmak ve WinDBG başlar başlamaz hata ayıklamayı otomatik olarak başlatmak için, Hata Ayıklayıcı dize parametresini değiştirmek için iletişim kutusuna d:\platform sdk\bin\windbg değerini girmeniz gerekir. exe - g.

5.1 Kesinti kısayolları

Bazen hata ayıklayıcıya hızlı bir şekilde girmeniz gerekir. Konsol uygulamalarında hata ayıklıyorsanız, tuş vuruşları +veya +özel bir istisna oluşturacak (DBG_CONTROL_C adlı). Bu istisna sizi doğrudan hata ayıklayıcıya götürecek ve hata ayıklamaya başlamanıza izin verecektir.

Hem Windows 2000 hem de Windows NT 4'ün kullanışlı bir özelliği, GUI uygulamalarında da herhangi bir zamanda hata ayıklayıcıya geçebilme yeteneğidir. Hata ayıklayıcı altında yürütüldüğünde, tuşuna basıldığında (varsayılan olarak) DebugBreak işlevine bir çağrıyla sonuçlanır. Bu tuşu kullanmanın ilginç bir yönü, onu bir hızlandırıcı olarak kullansanız veya o tuş için klavye mesajlarını başka bir şekilde işleseniz bile, sizi hata ayıklayıcıya bağlamaya devam edecek olmasıdır.

Windows NT 4'te kesme kısayol tuşu varsayılan olarak atanır, ancak Windows 2000'de bu amaç için hangi anahtarın kullanılması gerektiğini belirleyebilirsiniz. Neden kayıt defteri anahtarında

HKEY_LOCAL_MACHINE \ YAZILIM \ Microsoft \ WindowsNT \ CurrentVersion \ AeDebug

userDebuggerHotKey parametresini keycode değerine (VK_ *) ayarlayın. Örneğin, anahtarı kullanmak için hata ayıklayıcıya bağlanmak için UserDebuggerHotKey değerini 0x91 olarak ayarlayın. Değişiklikler, bilgisayar yeniden başlatıldıktan sonra yürürlüğe girer.

Çözüm

Hata ayıklamanın temel özelliklerini, türlerini ve türlerini, hata ayıklamanın genel konusunu, hataları ve bunların nasıl tespit edileceğini inceledik.

Mevcut hata ayıklayıcılar, kaynak kodu desteği, uygulama yürütme izleme, dinamik bellek değişikliği vb. dahil olmak üzere çok çeşitli araçlar sağlayarak mantıksal hataları bulmak için yazılım geliştirmede önemli bir rol oynar. vb.


Edebiyat

1 .. aspx? .Aspx? Id = 553022>

2.https: // ru. wikipedia.org/wiki/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA

Http: // burabai. kz / alg / hata ayıklama4. htm

4. Kostyukhin K. - GERÇEK ZAMANLI SİSTEMLERDE HATA AYIKLAMA. genel bakış

Çekirdek hata ayıklayıcısını nasıl başlatırım?

Ustanın cevabı:

Yazılım geliştirme sürecinde çok önemli bir bileşen vardır - hata ayıklama. Uygulama programlarıyla ilgili olarak, kullanıcı modunda çalışan ve genellikle IDE'de yerleşik olarak bulunan araçlarla gerçekleştirilir. Örneğin sürücülerde hata ayıklayabilmek için çekirdek hata ayıklayıcısını çalıştırmalısınız.

Komut işlemcisi cmd'yi başlatmanız gerekir. Görev çubuğundan başlat menüsünü açın. Görünen pencerede "Çalıştır ..." öğesini tıklayın. "Programı Çalıştır" penceresi görünecektir. Metin kutusuna cmd girin ve ardından Tamam'ı tıklayın.

Şimdi oluştur destek olmak boot.ini dosyası. İlk olarak, şu komutu kullanarak mevcut Windows kopyasının kurulum yolunu bulun: echo% SystemRoot%

Ardından, cihaz harflerini girerek ve ardından iki nokta üst üste koyarak kurulu işletim sistemine sahip diske gidin. cd komutunu kullanarak kök dizine geçin. Şimdi, boot.ini dosyasından gizli, salt okunur ve sistem özniteliklerini kaldırmak için attrib komutunu kullanın. Bir yedekleme oluşturmak için kopyala komutunu kullanın ve ardından öznitelikleri yerinde ayarlayın.

Geçerli önyükleme seçenekleri listesini görüntülemek için bootcfg / sorgu komutunu kullanın. Yeni çekirdek hata ayıklanabilir ayarlarınızı oluşturmak için hangi öğenin kullanılacağını belirlemek için listeyi inceleyin. Önyükleme Kaydı Kimliği hatırlanmalıdır.

Bir önyükleme kaydı oluşturmak için bootcfg / copy komutunu kullanın. Kopyalanacak girişin tanımlayıcısını belirtmek için / id parametresini kullanın. /d parametresini kullanarak görüntülenecek girişin adını belirtin. Şimdi bootcfg / sorgu komutunu kullanarak önyükleme seçenekleri listesine geri dönmeniz ve eklenen girişin kimliğine bakmanız gerekiyor.

Şimdi, önceden oluşturulmuş bir çekirdek hata ayıklayıcısını başlatmak için seçenekleri etkinleştirmeniz gerekiyor. önyükleme kaydı... Hedef makinede hata ayıklama yapacaksanız, /debug seçeneğini eklemeniz yeterlidir.

Ana makineye com bağlantı noktası aracılığıyla bağlı hedef bilgisayarla uzaktan hata ayıklama yapmak istiyorsanız, bağlantı noktası numarasını ve baud hızını belirtmek için / bağlantı noktası ve / baud seçeneklerini kullanın.

Bir FireWire kablosu (IEEE 1394 arayüzü) kullanarak uzaktan hata ayıklama yapacaksanız, ilgili modu etkinleştirmek için / dbg1394 seçeneğini ve kanal numarasını belirtmek için / ch seçeneğini kullanın.

Değişikliklerin yapıldığını doğrulamak için, / sorgu parametresiyle bootcfg komutunu kullanarak önyükleme dosyalarını test edin. Çıkış komutunu verdikten sonra kabuk penceresini kapatın.

Gerekirse işletim sisteminin önyükleme parametrelerini değiştirin. Kontrol panelini "Başlat" menüsünden açın ve zaten içinde "Sistem" öğesini açın. Açılan "Sistem Özellikleri" penceresinde "Gelişmiş" sekmesini seçin. Bu sekmede, "Başlangıç ​​ve Kurtarma" başlıklı bölümü seçin ve içindeki "Seçenekler" düğmesine tıklayın. Açılan "Başlangıç ​​ve Kurtarma" penceresinde "İşletim sistemlerinin listesini görüntüle" seçeneğini etkinleştirmeniz gerekir. Her iki iletişim kutusunu da "Tamam" düğmesiyle kapatın.

Bilgisayarı yeniden başlatın. Hata ayıklayıcı ile önyüklemeyi seçin. Oturum açın ve hedef makinede çalışmaya başlayın veya uzaktan hata ayıklamayı başlatın. WinDbg ve KD gibi araçları kullanın.

  • Yazarlar:

    Barinov S.S., Shevchenko O.G.

  • Yıl:
  • Bir kaynak:

    bilişim ve bilgisayar teknolojileri/ VI Uluslararası Öğrenci, Lisansüstü ve Genç Bilim İnsanları Bilimsel ve Teknik Konferansı Materyalleri - 23-25 ​​Kasım 2010, Donetsk, DonNTU. - 2010 .-- 448 s.

Dipnot

Microsoft Windows işletim sistemi ile ilgili olarak kullanıcı modu ve çekirdek modunun hata ayıklamasının karşılaştırmalı bir analizi verilmiş, ikincisinin hata ayıklamasını düzenlemenin farklılıkları ve sorunları vurgulanmıştır. Elde edilen sonuçlara dayanarak, acil durum ve etkileşimli hata ayıklama durumunda çekirdek modu hata ayıklayıcılarının oluşturulması için temel gereksinimler formüle edilmiştir. Gereksinimlere uygunluk için mevcut çözümlerin analizi yapıldı. Özellikle, Microsoft Windows Hata Ayıklayıcı'ya özel önem verilir.

Ana bölüm

Hata ayıklama, sistemdeki hataların nedenlerini belirleme ve düzeltme sürecidir. yazılım... Bazı projelerde hata ayıklama, toplam geliştirme süresinin %50'sini alır. Hata ayıklama, sürekli olarak geliştirilmekte olan özel araçlar kullanılarak büyük ölçüde basitleştirilebilir. Bu tür ana araç, yazılımın yürütülmesini kontrol etmenize, ilerlemesini izlemenize ve müdahale etmenize izin veren bir hata ayıklayıcıdır. Çekirdek hata ayıklama araçları öncelikle sürücü geliştiricileri tarafından kullanılır.

Uygulama yazılımı geliştirme araç takımı, programcıya çok çeşitli olanaklar sunar. Herhangi bir IDE, ihtiyaç duymadan hata ayıklama yeteneğini içerir. üçüncü taraf yardımcı programları... Özellikle sistem yazılımı ve sürücü geliştirmeden bahsediyorsak, o zaman özellikleri nedeniyle geliştirme süreci son derece zor ve çok az otomatiktir. Hata ayıklama dahil tüm geliştirme aşamaları ayrıdır. Her birini gerçekleştirmek için özel koşullar gereklidir: program kodunun yazılması tam teşekküllü bir şekilde gerçekleştirilir. bilgisayar sistemi, hata ayıklama - hata ayıklama sisteminde, test etme - koşullara bağlı olarak vb. Çekirdek modu hata ayıklayıcısının öğrenilmesi daha zordur ve buna bağlı olarak daha az kullanıcı dostudur.

Genel olarak, çekirdek hata ayıklama araçlarının eksikliğinden bahsedebiliriz. Bu tür araçlar mevcut olsa da, genellikle alternatifler hakkında konuşmaya gerek yoktur. Örneğin, Microsoft Windows Hata Ayıklayıcı'nın giriş eşiği çok yüksek. Birçok programcı, onunla tanıştığında ilk olumsuz deneyimden bahseder ve yeteneklerinin çoğu istenmeden kalır.

Sanal adres alanının yapısına bağlı olarak, uygulamada bir hata yapılırsa, bunun sonucunda uygulama keyfi bir bellek konumuna veri yazarsa, uygulama yalnızca kendi belleğine zarar verir ve işlemi etkilemez. diğer uygulamalar ve işletim sistemi. Çekirdek modu kodu, işletim sisteminin önemli veri yapılarına zarar verebilir ve bu da kaçınılmaz olarak genel bir arızaya yol açar. Etkili olmayan bir şekilde yazılmış bir sürücü, tüm işletim sisteminin ciddi şekilde bozulmasına da neden olabilir.

    Modern hata ayıklayıcılar aşağıdakileri sağlar temel fonksiyonlar:
  • kaynak kodu düzeyinde hata ayıklama;
  • yürütme kontrolü;
  • hafızayı görüntüleme ve değiştirme;
  • işlemci kayıtlarının içeriğini görüntüleme ve değiştirme;
  • çağrı yığınını görüntüleyin.

Demonte kodla çalışmayı kolaylaştırmak için sözde. hata ayıklama sembolleri. Bağlayıcı çalışırken, yürütülebilir dosyanın görüntüsüne ek olarak, programı yürütürken gerekli olmayan ancak hata ayıklamak için son derece yararlı olan bilgileri içeren bir veri dosyası da oluşturulabilir: işlevlerin adları, genel değişkenler, yapıların tanımı. Hata ayıklama simgeleri, Windows işletim sisteminin tüm yürütülebilir dosyaları için mevcuttur.

Yürütme kontrolü, erişildiğinde program kodunun yürütülmesini kesintiye uğratma ve sürdürme yeteneğini ifade eder. verilen komut program kodunda. Program kodu adım adım modda yürütülürse, programlama dilinin her sözlüğü için veya bir alt programdan çıkarken bir kesme oluşur. Ücretsiz yürütme ile, kodun önceden belirlenmiş bölümlerinde bir kesme meydana gelir - kesme noktalarının ayarlandığı yerler.

Çekirdek modu kodunu kesmek aşağıdaki ikilemi sunar. Hata ayıklayıcı, programcıyla etkileşim kurmak için kullanıcı arabirimini kullanır. Şunlar. hata ayıklayıcının en azından görünen kısmı kullanıcı modunda çalışır ve doğal olarak onu oluşturmak için uygulama programlama arabirimini (Windows API) kullanır, bu da sırayla çekirdek modu modüllerine dayanır. Bu nedenle, çekirdek modu kodunun askıya alınması bir kilitlenmeye neden olabilir: sistem, kullanıcı isteklerine yanıt vermeyi durduracaktır.

Çekirdek belleğine erişmek için hata ayıklayıcı bölümlerinin de çekirdek modunda çalışması gerekir. Bu, işlemcinin korumalı modunda belleği düzenlemenin açık bir sonucu olan iki sorunun aynı anda ortaya çıkmasına neden olur.

İlk sorun, sanal bellek adreslerinin çevrilmesiyle ilgilidir. Sürücüler, belleklerine erişerek sürekli olarak kullanıcı modu uygulamalarıyla etkileşime girer. Windows işletim sistemi, iş parçacığı bağlamı kavramı tarafından yönlendirilen sanal adresleri fiziksel adreslere çevirir. Bir akış bağlamı, bir akışın durumunu yansıtan ve özellikle bir dizi kayıt ve diğer bazı bilgileri içeren bir yapıdır. Kontrol başka bir iş parçacığına aktarıldığında, bir iş parçacığı hakkındaki bilgilerin kaydedildiği ve bir diğeri hakkındaki bilgilerin geri yüklendiği bir bağlam anahtarı meydana gelir. Bir iş parçacığının bağlamı başka bir işlemin iş parçacığına geçtiğinde, sanal adresleri fiziksel adreslere çevirmek için kullanılan sayfa dizini de değiştirilir.

Tuhaflık, sistem çağrılarını gönderirken Windows işletim sisteminin bağlamı değiştirmemesidir. Bu, çekirdek modu kodunun kullanıcı modu sanal adreslerini kullanmasına izin verir.

Kesintileri gönderirken veya sistem iş parçacıklarını yürütürken durum farklıdır. Herhangi bir zamanda bir kesinti meydana gelebilir, bu nedenle hangi iş parçacığı bağlamının kullanılacağı tahmin edilemez. Sistem iş parçacıkları herhangi bir işleme ait değildir ve kullanıcı modu sanal adreslerini çeviremez. Bu durumlarda, kullanıcı modu belleğine erişmenin mümkün olmadığı sonucu çıkar.

İkinci sorun, yeniden yerleştirilebilir bellek erişimidir. Bellekteki bilgilerin çoğu yeniden yerleştirilebilir ve herhangi bir zamanda fiziksel bellekten başka bir yere taşınabilir. HDD bir sayfa dosyasına. Fiziksel bellekte olmayan bir sayfaya erişirseniz, işlemci normalde bellek yöneticisi tarafından işlenecek olan bir Sayfa Hatası kesmesi oluşturur ve sonuç olarak sayfa, sayfa dosyasından okunur ve fiziksel belleğe yüklenir.

Hata ayıklayıcı kodu kullanmaya zorlanırsa açıklanan davranış bozulur yüksek seviye kesme istek seviyeleri (IRQL). IRQL, bellek yöneticisinin IRQL'si ile eşleşir veya onu aşarsa, ikincisi eksik sayfayı yükleyemeyecektir, çünkü işletim sistemi Sayfa Hatası kesmesini engeller. Bu, işletim sistemini çökertir.

Hata ayıklama genellikle etkileşimli ve acil durum olarak ikiye ayrılır. Etkileşimli yerel hata ayıklamada hata ayıklayıcı, hata ayıklama nesnesiyle aynı sistemde çalışır. Etkileşimli uzaktan hata ayıklamada, hata ayıklayıcı ve hata ayıklama nesnesi farklı sistemlerde çalışır. Çekirdek kodunda hata ayıklarken, ağ henüz çalışmıyorken, sistem önyüklemesinin ilk aşamalarından itibaren kontrol edilmelidir, bu nedenle sistemleri iletişim kurmak için COM, FireWire, USB gibi basit seri arabirimler kullanılır. Son zamanlarda, farklı soyutlama seviyelerinde yazılım sanallaştırmasının geliştirilmesindeki eğilimler sayesinde, sanal makineler giderek daha fazla ilgi görüyor. Konuk işletim sistemi hata ayıklayıcı işletim sistemi gibi davranır, barındırılan işletim sistemi hata ayıklayıcı kullanıcı arabirimini içerir.

Bu nedenle, acil hata ayıklama, hata ayıklama aracının test makinesine yüklenmesini gerektirmez. Windows işletim sisteminin dağıtım kiti, acil durum hata ayıklamasını uygulamak için mekanizmalar içerir. Yeniden başlatmadan önce, işletim sistemi durumu hakkında geliştiricinin analiz edip nedenini bulabileceği bilgileri kaydedebilir. Bir dosyada saklanan bu bilgilere bellek dökümü denir.

Temel çekirdek modu hata ayıklama araçları, Windows için Hata Ayıklama Araçları ücretsiz yazılım paketinin bir parçası olarak Windows işletim sistemi üreticisi tarafından sağlanır. Araçlar, sırasıyla WinDbg ve KD grafik ve konsol hata ayıklayıcılarını içerir (Windows Hata Ayıklayıcı). Bu hata ayıklayıcıların çalışması, işletim sisteminin geliştiricileri tarafından sağlanan ve çekirdeğine gömülü mekanizmalara dayanır.

Windows Hata Ayıklayıcı için ana mod, komut yorumlayıcı modudur. Modüler yapı sayesinde, sağlanan geliştiricilerle birlikte Windows komutları Hata ayıklayıcı destekler üçüncü taraf modülleri uzantılar denir. Aslında, yerleşik komutların çoğu uzantı olarak da sağlanır.

Windows Hata Ayıklayıcı, uzaktan etkileşimli ve acil durum hata ayıklamaya odaklanır, kullanıldığında tüm yetenekleri ortaya çıkar. Aynı zamanda, tam teşekküllü yerel etkileşimli hata ayıklama desteklenmez: hata ayıklayıcı yalnızca bazı çekirdek yapılarının görüntülenmesine izin verir.

Mark Russinovich'in LiveKD adında bir anlamda yerel etkileşimli hata ayıklamayı uygulayan bir Windows Hata Ayıklayıcı eklentisi var. LiveKD anında bir bellek dökümü oluşturur çalışma sistemi ve hata ayıklama için kullanır.

Windows için Hata Ayıklama Araçları, tüm modern Windows işletim sistemlerini desteklemek için düzenli olarak güncellenir.

Compuware'in DriverStudio paketindeki SoftICE çekirdek hata ayıklayıcısı, geleneksel olarak Windows için Hata Ayıklama Araçları paketine bir alternatif olmuştur. SoftICE'ın ayırt edici bir özelliği, desteklenen bir bilgisayarda yerel etkileşimli hata ayıklamanın uygulanmasıydı. donanım... Hata ayıklayıcı, işletim sisteminin çalışması üzerinde neredeyse tam denetime sahipti.

3 Nisan 2006 tarihi itibariyle DriverStudio ürün ailesinin satışı, "birçok teknik ve ticari problemin yanı sıra genel piyasa koşulları" nedeniyle durdurulmuştur. En son sürüm Desteğin yayınlandığı işletim sistemi Windows XP Service Pack 2'dir. Tipik olarak, hizmet paketleri işletim sistemi API'sini değiştirmez, ancak sistem çağrı numaraları ve diğer belgelenmemiş bilgiler değişebilir. SoftICE hata ayıklayıcısı, dahili veri yapılarının sabit kodlanmış adreslerine dayanıyordu. Sonuç olarak, Service Pack 3'ün piyasaya sürülmesiyle uyumluluk bozuldu. Açıkçası, Windows işletim sisteminin sonraki sürümleri de desteklenmemektedir.

Syser Kernel Debugger, SoftICE hata ayıklayıcısının yerine küçük bir Çinli şirket Sysersoft tarafından oluşturuldu. İlk nihai sürüm 2007'de yayınlandı. SoftICE gibi, Syser Kernel Debugger, çalışan bir sistemde etkileşimli hata ayıklama yeteneğine sahiptir. Windows'un yalnızca modern 32 bit sürümleri desteklenir.

Şu anda Windows Hata Ayıklayıcı, çekirdek modülü geliştiricileri arasında ana araçtır. Ayrıca Windows çekirdek ekibi tarafından da kullanılır.