İşletim sisteminin çekirdek hata ayıklayıcısının nasıl çalıştığı. Windows Çekirdek Modu Hata Ayıklama Araçları Linice'i Derleme ve Yapılandırma

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ıları hem de işletim sistemi düzeyinde çalışmayan, ancak bir sanal makine veya bir tür yorumlayıcı düzeyinde çalışan hata ayıklayıcıları anlamak mümkün olacaktır.


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 herkes Delphi'de programladığında ilk karşılaşan kişi oldu (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, özünde, 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, "ah" tanıtıcısı 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 şüphesiz ki insanı bilgisayar bilgisi açısından geliştirir ama tabi 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 biliyor.

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ı!

  • 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

İşletim sistemine uygulandığı şekliyle hata ayıklama kullanıcı modu ve çekirdek modunun karşılaştırmalı bir analizi verilmiştir. Microsoft Windows, ikincisinin hata ayıklamasını organize etmenin 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ği 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:
  • seviye hata ayıklama kaynak kodu;
  • 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ı. İşletim sisteminin tüm yürütülebilir dosyaları için hata ayıklama simgeleri mevcuttur. Windows sistemleri.

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 başka bir yerden taşınabilir. fiziksel hafızaüzerinde 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, grafik ve konsol hata ayıklayıcıları Sırasıyla WinDbg ve KD (bundan böyle Windows Hata Ayıklayıcı olarak anılacaktır). 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.

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

"Çekirdek hata ayıklama" terimi, çekirdeğin dahili veri yapısının incelenmesini ve/veya çekirdekteki işlevlerin adım adım izlenmesini ifade eder. Bu hata ayıklama çok faydalı yol Windows'un dahili aygıtını incelemek, dahili aygıtın bir görüntüsünü elde etmenize olanak tanır. sistem bilgisi bu, başka hiçbir yolla elde edilemez ve çekirdekte kod yürütmenin ilerlemesinin net bir görünümünü verir.

düşünmeden önce Farklı yollarÇekirdeğin hatalarını ayıklarken, bu tür herhangi bir hata ayıklama işlemini gerçekleştirmek için gerekli olacak dosya setini inceleyelim.

Çekirdek Hata Ayıklama Sembolleri

Sembol dosyaları, işlevlerin ve değişkenlerin adlarını ve veri yapılarının şemasını ve biçimini içerir. Bunlar, bağlayıcı program tarafından oluşturulur ve hata ayıklayıcılar tarafından bu adlara başvurmak ve bir hata ayıklama oturumu sırasında bunları görüntülemek için kullanılır. Bu bilgi genellikle ikili dosyada saklanmaz çünkü kod yürütüldüğünde buna gerek yoktur. Bu, onsuz ikili kodun daha küçük ve daha hızlı hale geldiği anlamına gelir. Ancak bu aynı zamanda hata ayıklama sırasında hata ayıklayıcıya hata ayıklama oturumu sırasında başvurulan ikili dosyalarla ilişkili sembol dosyalarına erişim sağlamanız gerektiği anlamına gelir.

Bir veri yapısının iç yapısını araştırmak için herhangi bir çekirdek modu hata ayıklama aracını kullanmak Windows çekirdeği(işlemlerin listesi, iş parçacığı blokları, yüklenen sürücülerin listesi, bellek kullanım bilgileri vb.) doğru sembol dosyalarına ve en azından çekirdek ikili görüntüsü Ntoskrnl.exe için sembol dosyasına ihtiyacınız vardır. Sembol tablosu dosyaları, ayıklandıkları ikili görüntünün sürümüyle eşleşmelidir. Örneğin, eğer ayarlanırsa Windows paketi Hizmet Paketi veya bazı çekirdek güncelleme düzeltmeleri için uygun şekilde güncellenmiş sembol dosyalarını edinmeniz gerekecektir.

Windows'un farklı sürümleri için sembolleri indirmek ve kurmak kolaydır, ancak düzeltmeler için sembolleri güncellemek her zaman mümkün değildir. almanın en kolay yolu istediğiniz sürüm Hata ayıklayıcıda belirtilen sembol yolu için özel sözdizimini kullanarak özel bir Microsoft Symbol Server'a erişerek hata ayıklama için semboller. Örneğin, aşağıdaki semboller yolu, hata ayıklayıcıyı internet sembol sunucusundan semboller indirmeye ve yerel bir kopyayı c:\symbols:srv *c:\symbols * klasörüne http: //msdl.microsoft.com/download/ kaydetmeye zorlar. semboller

Sembol sunucusunun kullanımına ilişkin ayrıntılı talimatlar Hata Ayıklama Araçları Yardım dosyasında veya İnternet'te http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx adresinde bulunabilir.

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ımlıyoruz: 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ı dahil olmak üzere kullanıcı modunda çalışan herhangi bir uygulamada ve Windows 2000 hizmetleri gibi tipik olmayan uygulamalarda hata ayıklamak için tasarlanmıştır.Genel olarak, bu tür hata ayıklayıcılar 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'sinin teslimi aşağıdaki kuralı ima eder: 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ı işlemden ayrılamaz. 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 zamanları için, sanal makinelerin kendileri eksiksiz bir hata ayıklama ortamı sağlar ve Win32 hata ayıklama API'sini kullanmaz. 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 MSDN'deki Java Uygulamalarında Hata Ayıklama ve Profil Oluşturma bölümüne bakın. 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 kaynak kodunda ve Visual C ++ ve Visual Basic hata ayıklayıcılarının bizi mahvettiği diğer güzel özelliklerin hatalarını ayıklamak için yeterli desteği yoktu.

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 - Windows 2000 işletim sisteminin ana çekirdek dosyası 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ış

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. Yenisi eklenecek önyükleme kaydı ve hata ayıklama işlevleri mevcut olacak 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. Şu anda, yalnızca üçüncü bölümde kullanılacak olan jetonları çalmak için tasarlanmış 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.