Vad är kärnfelsökning? Felsökningsverktyg för Windows Kernel Mode


Felsökare i kärnläge sitter mellan CPU:n och operativsystemet. Det betyder att när du stoppar felsökaren i kärnläge så stannar operativsystemet också helt. Det är inte svårt att föreställa sig att övergången operativ system till hårt stopp är användbart när du arbetar med timers och tidsproblem. Men med undantag för en debugger, som kommer att diskuteras nedan (i avsnittet "SoftlCE Debugger" i det här kapitlet), kan du inte felsöka användarlägeskod med kärnlägesfelsökning.

Det finns inte många felsökare i kärnläge. Här är några av dem: Windows 80386 Debugger (WDEB386), Kernel Debugger (1386KD), WinDBG och SoftlCE. Var och en av dessa felsökningar beskrivs kortfattat i följande avsnitt.

Debugger WDBEB386

WDEB386 är en lägesfelsökare Windows kärnor 98, distribuerad som en del av Platform SDK. Denna debugger är endast användbar för utvecklare som skriver drivrutiner virtuella enheter Windows 98 (VxD). Liksom de flesta kärnlägesfelsökare för Windows-operativsystem kräver WDEB386-felsökaren två maskiner och en nollmodemkabel för att fungera. Två maskiner behövs eftersom den del av felsökaren som körs på målmaskinen har begränsad åtkomst till sin hårdvara så att den skickar sin utdata och tar emot kommandon från den andra maskinen.

WDEB386-felsökaren har intressant historia. Det började som ett internt bakgrundsverktyg för Microsoft under Windows 3.0-eran. Det var svårt att använda och hade inte tillräckligt med stöd för källkodsfelsökning och andra trevliga funktioner som Visual C++ och Visual Basic.

"Dot" (DOT)-kommandon är den viktigaste egenskapen hos WDEB386. Genom avbrott INT 41 kan WDEB386 utökas för att lägga till kommandon. Denna utökningsmöjlighet gör att VxD-drivrutinförfattare kan skapa anpassade felsökningskommandon som ger dem enkel tillgång till information i sina virtuella enheter. Felsök Windows version 98 stöder en mängd DOT-kommandon som låter dig observera operativsystemets exakta tillstånd när som helst i felsökningsprocessen.

Debugger I386KD

Windows 2000 skiljer sig från Windows 98 genom att den faktiska fungerande delen av kärnlägesfelsökningen är NTOSKRNL-delen. EXE - fil för huvudoperativkärnan Windows-system 2000. Denna debugger är tillgänglig i både gratis (release) och testade (debug) operativsystemkonfigurationer. För att aktivera felsökning i kärnläge, ställ in bootloader-alternativet /DEBUG till BOOT. INI och dessutom bootloader-alternativet /DEBUGPORT, om du behöver ställa in kommunikationsporten för kärnlägesfelsökning till ett annat värde än standardvärdet (COM1). I386KD körs på sin egen maskin och kommunicerar med Windows 2000-maskinen via en nollmodemkabel.

Kernel mode debugger NTOSKRNL. EXE gör bara tillräckligt för att kontrollera processorn så att operativsystemet kan felsökas. Det mesta av felsökningsarbetet - symbolbearbetning, utökade brytpunkter och demontering - görs på 1386KD-sidan. Ett Windows tid NT 4 Device Driver Kit (DDK) dokumenterade protokollet som används i nollmodemkabeln. Microsoft dokumenterar det dock inte längre.

Kraften i 1386KD är uppenbar när du tittar på alla kommandon den erbjuder för att komma åt internt Windows tillstånd 2000. Kunskap om hur drivrutiner fungerar i Windows 2000 kommer att hjälpa programmeraren att övervaka utmatningen av många kommandon. Trots all sin kraft används i386KD nästan aldrig eftersom det är en konsolapplikation, som är väldigt tråkig att använda för baslinjefelsökning.

Introduktion

1. Typer av Windows-felsökare

2. Användarlägesfelsökning

3. Felsökare i kärnläge

3.1 WDEB386 Debugger

3.2 Debugger I386KD

3.3 Vinn DBG Debugger

3.4 SoftICE Debugger

4. Generell fråga felsökning

5. Automatisk start applikationer i felsökaren

5.1 Avbryt genvägstangenter

Slutsats

Litteratur

Introduktion

Att lära sig hur mjukvaruverktyg fungerar är den svåraste delen av felsökningsprocessen. Endast genom att förstå verktygens möjligheter och begränsningar kan du få ut mer av dem och lägga mindre tid på att felsöka. I allmänhet är debuggers extremt användbara, men kan leda till ganska subtila problem som leder programmeraren till en återvändsgränd. Det här kapitlet visar vad en debugger är och hur olika debuggers fungerar på Win32-operativsystem (Microsofts 32-bitars Windows-operativsystem).

Samtidigt kommer vi att fokusera på de speciella egenskaperna hos debuggers i allmänhet som är aktiverade när någon mjukvaruprocess körs under kontroll av den senare. Den förklarar också hur du kan förbättra vissa funktioner i 32-bitars Windows-operativsystem för att göra felsökning enklare. Två proprietära debuggers kommer att presenteras, vars källkod finns på den medföljande CD-skivan. Den första (MinDBG) har tillräckliga möjligheter för att kallas en debugger. Den andra (WDBG) är ett exempel på felsökning Microsoft Windows, som gör nästan allt en riktig systemfelsökare gör, inklusive att manipulera symboltabeller, hantera brytpunkter, generera disassemblerkod och koordinera med det grafiska användargränssnittet (GUI). När vi diskuterar WDBG kommer vi att visa hur brytpunkter fungerar och diskutera vad de olika symbolfilerna är.

Innan vi går vidare till huvudmaterialet i detta kapitel, låt oss definiera två standardterm De som kommer att användas ofta i den här boken är huvud- (eller bas-) felsökaren och slavfelsökaren. Enkelt uttryckt är en masterdebugger en process som kan felkontrollera en annan process, och en slavdebugger är en process som körs under masterdebuggern. På vissa operativsystem kallas huvudfelsökaren för överordnad process, och slavfelsökaren kallas underordnad process.

Debugger (debugger, engelsk debugger från bugg) - datorprogram, designad för att hitta fel i andra program, operativsystemkärnor, SQL-frågor och andra typer av kod. Debuggern låter dig spåra, övervaka, ställa in eller ändra variabelvärden när kod körs, ställa in och ta bort brytpunkter eller stoppförhållanden och mer.

De flesta utvecklare är mer bekanta med felsökare i användarläge. Inte överraskande är detta läges debuggers designade för felsökning av användarlägesapplikationer. Ett utmärkt exempel på en felsökning i användarläge är Microsoft Visual C++ debugger. Kärnlägesfelsökningar, som namnet antyder, är felsökare som låter dig felsöka operativsystemets kärna. De används främst av de som skriver (och felsöker, naturligtvis) drivrutiner.

2. Användarlägesfelsökning

Användarlägesfelsökningar är utformade för att felsöka alla program som körs i användarläge, inklusive alla GUI-program, såväl som vissa inte så regelbundna ansökningar, som Windows 2000-tjänster I allmänhet stöder debuggers av denna typ GUI användare (GUI1). Huvudfunktionen hos sådana debuggers är att de använder Win32 debug-applikationsprogrammeringsgränssnittet (debug API). Eftersom operativsystemet markerar en slavfelsökare som "kör i specialläge" kan du använda IsDebuggerPresent API-funktionen för att ta reda på om din process körs under en felsökning.

När man tillhandahåller Win32-felsöknings-API:et finns det en underförstådd konvention: när en process väl körs under felsöknings-API:et (och därmed gör den till en slavprocess) kan huvudfelsökaren inte kopplas loss från den processen. Detta symbiotiska förhållande innebär att om huvudfelsökaren avslutas, avslutas även slavfelsökaren. Masterdebuggern är begränsad till att endast felsöka slavfelsökaren och alla processer som den skapar (om masterdebuggern stöder underordnade processer).

GUI - Grafiskt användargränssnitt. - Per.

För tolkade språk och runtime-system som använder en virtuell maskintillvägagångssätt tillhandahålls en komplett felsökningsmiljö själva virtuella maskiner, och de använder inte Win32 debugging API. Här är några exempel på dessa typer av miljöer: Java virtuella maskiner(JVM) från Microsoft eller Sun, en skriptmiljö för webbapplikationer från Microsoft och en p-kodtolkare i Microsoft Visual Basic-systemet.

debugger kärna operativsystem

Vi kommer till felsökning i Visual Basic i kapitel 7, men var medveten om att Visual Basic p-kodgränssnittet inte är dokumenterat. Vi kommer inte att fördjupa oss i Java och skriptfelsökningsgränssnitt, dessa ämnen ligger utanför den här bokens räckvidd. För mer information om felsökning och profilering av Microsoft JVM, se Felsökning och profilering av Java-applikationer Java-applikationer) på MSDN. Uppsättningen av sådana gränssnitt är mycket rik och varierad och låter dig helt kontrollera driften av JVM. För information om hur du skriver en skriptfelsökning, se MSDN-ämnet "Active Script Debugging API Objects." Liksom JVM ger skriptfelsökningsobjekt ett rikt gränssnitt för skriptåtkomst och dokumentation.

Ett överraskande antal program använder Win32 debugging API. Dessa inkluderar: Visual C++ debugger, som beskrivs i detalj i kapitel 5 och 6; Windows-debuggern (WinDBG), som diskuteras i nästa avsnitt (om kärnlägesfelsökaren); BoundsChecker-program från Compuware NuMega; Plattformsprogram SDK HeapWalker; Platform SDK Beror program; Borland Delphi och C++ Builder felsökare, samt NT Symbolic Debugger (NTSD). Jag är säker på att det finns många fler.

3. Felsökare i kärnläge

Felsökare i kärnläge sitter mellan CPU:n och operativsystemet. Det betyder att när du stoppar felsökaren i kärnläge så stannar operativsystemet också helt. Det är lätt att se att det är användbart att stoppa operativsystemet när du arbetar med timers och tidsproblem. Men med undantag för en debugger, som kommer att diskuteras nedan (i avsnittet "SoftlCE Debugger" i det här kapitlet), kan du inte felsöka användarlägeskod med kärnlägesfelsökning.

Det finns inte många felsökare i kärnläge. Här är några av dem: Windows 80386 Debugger (WDEB386), Kernel Debugger (1386KD), WinDBG och SoftlCE. Var och en av dessa felsökningar beskrivs kortfattat i följande avsnitt.

3.1 WDEB386 Debugger

WDEB386 är en Windows 98-kärnlägesfelsökning som distribueras som en del av Platform SDK. Denna debugger är endast användbar för utvecklare som skriver virtuella drivrutiner. Windows-enheter 98 (VxD). Liksom de flesta kärnlägesfelsökare för Windows-operativsystem kräver WDEB386-felsökaren två maskiner och en nollmodemkabel för att fungera. Två maskiner behövs eftersom den del av felsökaren som körs på måldatorn har begränsad tillgång till sin hårdvara, så den skickar sin utdata till och tar emot kommandon från den andra maskinen.

WDEB386-felsökaren har en intressant historia. Det började som ett internt bakgrundsverktyg för Microsoft under Windows 3.0-eran. Det var svårt att använda och saknade tillräckligt stöd för källkodsfelsökning och andra trevliga funktioner som Visual C++ och Visual Basic-felsökningarna hade skämt bort oss med.

"Dot" (DOT)-kommandon är den viktigaste egenskapen hos WDEB386. Genom avbrott INT 41 kan WDEB386 utökas för att lägga till kommandon. Denna utökningsmöjlighet gör att VxD-drivrutinförfattare kan skapa anpassade felsökningskommandon som ger dem enkel tillgång till information i sina virtuella enheter. Felsökningsversionen av Windows 98 stöder många DOT-kommandon som låter dig observera operativsystemets exakta tillstånd när som helst i felsökningsprocessen.

3.2 Debugger I386KD

Windows 2000 skiljer sig från Windows 98 genom att den faktiska fungerande delen av kärnlägesfelsökningen är NTOSKRNL-delen. EXE - filen för huvudkärnan i Windows 2000-operativsystemet. Den här felsökaren är tillgänglig i både gratis (release) och testade (felsöka) operativsystemkonfigurationer. För att aktivera felsökning i kärnläge, ställ in bootloader-alternativet /DEBUG till BOOT. INI och dessutom bootloader-alternativet /DEBUGPORT, om du behöver ställa in kommunikationsporten för kärnlägesfelsökning till ett annat värde än standardvärdet (COM1). I386KD körs på sin egen maskin och kommunicerar med Windows 2000-maskinen via en nollmodemkabel.

Kernel mode debugger NTOSKRNL. EXE gör bara tillräckligt för att kontrollera processorn så att operativsystemet kan felsökas. Det mesta av felsökningsarbetet - symbolbearbetning, utökade brytpunkter och demontering - görs på 1386KD-sidan. En gång dokumenterade Windows NT 4 Device Driver Kit (DDK) protokollet som används i nollmodemkabeln. Microsoft dokumenterar det dock inte längre.

Kraften i 1386KD är uppenbar när du tittar på alla kommandon den erbjuder för att komma åt det interna tillståndet i Windows 2000. Att veta hur drivrutiner fungerar i Windows 2000 kommer att hjälpa en programmerare att övervaka resultatet av många kommandon. Trots all sin kraft används i386KD nästan aldrig eftersom det är en konsolapplikation, som är väldigt tråkig att använda för baslinjefelsökning.

3.3 Vinn DBG Debugger

WinDBG är en debugger som kommer som en del av Platform SDK. Du kan också ladda ner den från #"897008.files/image001.gif">

Figur 1. Utdata från GFLAGS-programmet. EXE

Notering 4-1. Exempel på Windows 2000-högförstöring

void main (void)

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

// Tilldela minne för ett block på 10 byte.

LPVOID pMem = HeapAlloc(hHeap, 0,10);

// Skriv 12 byte i ett 10-byte block (heap overflow).

memset (pMem, OxAC,

// Distribuera nytt block 20 byte i storlek.

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

// Skriv 1 byte till det andra blocket.

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

// Frigör det första blocket. Denna vädjan till HeapFree kommer att vara

// utlösa en brytpunkt i felsökningshögkoden

// operativ system.

HeapFree(hHeap, 0, pMem);

// Frigör det andra blocket. Observera att detta samtal inte kommer

// utfärda felmeddelanden

HeapFree(hHeap, 0, pMem2);

// Frigör dummyblocket. Observera att detta samtal inte kommer

// utfärda felmeddelanden

Om du markerar samma rutor som i Fig. 4.1 och upprepar exekveringen av HEAPER. EXE får du följande, mer utförliga utdata:

PAGEHEAP: process 0x490 skapade felsökningshögen 00430000

(flaggor 0xl, 50, 25, 0, 0): process 0x490 skapad felsökningshög 00CF0000

(flaggor Oxl, 50, 25, 0, - 0): process 0x490 skapad felsökningshög 01600000

(flaggor Oxl, 50, 25, 0, 0): Svansfyllningskorruption upptäckt: vid 0x01606FF0storlek 0x0000000Asize 0x00000010at Ox01606FFA: Försök att referera block som inte är allokerat

Innehållet i listan förklaras av namnen på flaggorna som anges av panelen Globala flaggor.

Diskuterar GFLAGS-programmet. EXE, jag vill peka ut ett mycket användbart alternativ - Visa Loader Snaps. Om du markerar den här rutan och kör programmet kommer du att se vad som kallas en ögonblicksbild av programmet, som visar var Windows 2000 laddar DLL-filerna och hur det börjar organisera importen. Om du behöver se exakt vad som gör Windows starthanterare 2000 när du laddar ett program (särskilt om ett problem upptäcks i det), kan det vara ett mycket användbart steg att aktivera det här alternativet. För mer information om ögonblicksbilder av bootloader, se Matt Pietreks kolumn "Under the Hood" i septembernumret 1999 av Microsoft Systems Journal.

5. Starta automatiskt applikationer i felsökaren

De svåraste typerna av applikationer att felsöka är de som startas av en annan process. Denna kategori är attackerad Windows-tjänster 2000 och out-of-process COM-servrar (COM out-of-process-servrar). För att tvinga en debugger att koppla till en process kan du i många fall använda DebugBreak API-funktionen. I två fall kommer denna funktion dock inte att fungera. För det första fungerar det ibland inte med Windows 2000-tjänster. Om du behöver felsöka uppstarten av en tjänst kommer felsökningen att kopplas till genom att anropa DebugBreak, men när felsökaren startar kan tjänsten ha gått ut och Windows 2000 kommer att sluta. Det. För det andra kommer DebugBreak inte att fungera när du behöver felsöka en COM-server som inte är igång. Om du anropar DebugBreak kommer COM-felhanteraren att fånga brytpunktsundantaget och avsluta COM-servern. Som tur är låter Windows 2000 dig ange att programmet ska starta i felsökaren. Den här egenskapen låter dig börja felsöka direkt från den första instruktionen. Innan du aktiverar den här egenskapen för en Windows 2000-tjänst måste du dock se till att tjänsten är konfigurerad för att kommunicera med Windows 2000-skrivbordet.

Kör med Debugger-egenskapen kan aktiveras på två sätt. Det enklaste är att köra GFLAGS-verktyget. EXE och välj alternativknappen BildFil alternativ(se fig. 4.1). Efter att ha angett i det redigerbara fältet I magikerFilnamn kryssrutan program binärt filnamn Debugger i grupp Bild Debuggeralternativ) och ange den fullständiga sökvägen till felsökaren i det redigerbara fältet bredvid den här kryssrutan.

En svårare metod: du måste manuellt ställa in nödvändiga parametrar i lämpliga registersektioner (med RegEdit-redigeraren). Under_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NTXCurrent Version\Image Tile Execution Options

skapa en undernyckel vars namn är detsamma som filnamnet på din applikation. Till exempel om programmets namn är FOO. EXE, då är registerundernyckelns namn också FOO. EXE. Skapa en ny strängparameter med namnet Debugger i den här undernyckeln. I dialogrutan Redigera strängparameter skriver du det fullständiga filnamnet (inklusive katalogsökvägen) för den felsökare du valde. Om du angav GFLAGS. EXE och ställ in några globala alternativ, kommer du att märka strängvärdet GiobaiFiag i din applikationsnyckel.

Nu när du startar din applikation läses felsökaren automatiskt in och startas. Kommandoradsalternativ för felsökaren kan också anges i strängparametern Debugger (efter felsökningsprogrammets namn). Till exempel, för att använda WinDBG-felsökningen och automatiskt initiera felsökning så snart WinDBG startar, måste du ange värdet d: \platform sdk\bin\windbg i dialogrutan för att ändra strängparametern Debugger. ex-g.

5.1 Avbryt genvägstangenter

Ibland behöver du snabbt hoppa in i felsökaren. Om du felsöker konsolapplikationer, sedan tangenttryckningar +eller +kommer att skapa ett speciellt undantag (som heter DBG_CONTROL_C). Detta undantag tar dig direkt till felsökaren och låter dig börja felsöka.

En användbar funktion i både Windows 2000 och Windows NT 4 är möjligheten att växla till felsökaren när som helst, även i GUI-applikationer. När du kör under felsökaren, tryck på knappen resulterar (som standard) i att anropa DebugBreak-funktionen. Den intressanta aspekten med att hantera den här nyckeln är att även om du använder den som en accelerator eller på annat sätt hanterar tangentbordsmeddelanden för den här nyckeln, kommer den fortfarande att ansluta dig till felsökaren.

I Windows NT 4, genvägen för break-tangenten tilldelas som standard, men i Windows 2000 kan du bestämma vilken nyckel som ska användas för dessa ändamål. Varför i registerdelen

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug

Ställ in parametern userDebuggerHotKey till nyckelkoden (VK_*). Till exempel att använda nyckeln För att ansluta till felsökaren bör du ställa in UserDebuggerHotKey-värdet till 0x91. Ändringarna träder i kraft efter att datorn har startat om.

Slutsats

Vi tittade på de grundläggande funktionerna för felsökning, dess typer och typer, den allmänna frågan om felsökning, såväl som fel och hur man upptäcker dem.

Befintliga debuggers spelar en viktig roll i mjukvaruutveckling när de söker efter logiska fel, och tillhandahåller ett brett utbud av verktyg, inklusive stöd för källkod, spårning av applikationskörning, dynamisk minnesmodifiering, etc. etc.


Litteratur

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://bourabai. kz/alg/debug4. htm

4. Kostyukhin K. - FELSÖKNING AV REALTIDSSYSTEM. Recension

  • Författare:

    Barinov S.S., Shevchenko O.G.

  • År:
  • Källa:

    Datavetenskap och Datorteknologier/ Material från VI:s internationella vetenskapliga och tekniska konferens för studenter, doktorander och unga forskare - 23-25 ​​november 2010, Donetsk, DonNTU. - 2010. - 448 sid.

anteckning

Given jämförande analys felsökning av användarläge och kärnläge i förhållande till operativsystemet Microsoft Windows, skillnaderna och problemen med att organisera felsökning av det senare belyses. Baserat på de erhållna resultaten formuleras de grundläggande kraven för att bygga felsökare i kärnläge i händelse av nödsituationer och interaktiv felsökning. Analys genomförd befintliga lösningar för att uppfylla kraven. Särskild uppmärksamhet ägnas åt Microsoft Windows Debugger.

Huvudsak

Felsökning är processen att identifiera och eliminera orsakerna till fel i programvara. I vissa projekt tar felsökning upp till 50 % av den totala utvecklingstiden. Felsökning kan avsevärt förenklas genom att använda specialiserade verktyg som ständigt förbättras. Det viktigaste verktyget är en debugger, som låter dig kontrollera körningen av programvara, övervaka dess framsteg och störa den. Kernel-felsökningsverktyg används främst av drivrutinsutvecklare.

Utvecklingsverktyg för tillämpningsprogram erbjuder programmeraren ett brett utbud av möjligheter. Alla integrerade utvecklingsmiljöer inkluderar möjligheten att felsöka utan att behöva använda tredjepartsverktyg. Om vi pratar om om systemprogramvara och utveckling av drivrutiner i synnerhet, på grund av dess särdrag är utvecklingsprocessen extremt svår och lite automatiserad. Alla utvecklingsfaser, inklusive felsökning, är separata. För att utföra var och en av dem krävs särskilda villkor: skrivning av programkod utförs i full skala datorsystem, felsökning - på ett felsökningssystem, testning - beroende på omständigheterna osv. Själva kärnlägesfelsökaren är svårare att lära sig och följaktligen mindre vänlig.

I allmänhet kan vi prata om bristen på kärnfelsökningsverktyg. Även om sådana medel finns att tillgå talas det ofta inte om alternativ. Till exempel har Microsoft Windows Debugger en mycket hög ingångströskel. Många programmerare pratar om den första negativa upplevelsen när de möter den, och de flesta av dess funktioner förblir outtagna.

Baserat på strukturen för det virtuella adressutrymmet, om en applikation gör ett fel som gör att applikationen skriver data till en godtycklig minnesplats, kommer applikationen bara att skada eget minne och kommer inte att påverka driften av andra applikationer och operativsystemet. Medan programkod kärnläge kan skada viktiga strukturer operativsystemsdata, vilket oundvikligen kommer att leda till ett allmänt fel. En ineffektivt skriven drivrutin kan också orsaka allvarlig försämring av hela operativsystemet.

    Moderna debuggers tillhandahåller följande grundläggande funktioner:
  • felsökning på källkodsnivå;
  • ledning av utförande;
  • titta på och ändra minne;
  • visning och ändring av innehållet i processorregister;
  • tittar på samtalsstacken.

För att göra det lättare att arbeta med demonterad kod, den sk. felsökningssymboler. Medan länken körs, förutom bilden av den körbara filen, kan en datafil också skapas som innehåller information som inte krävs när programmet körs, men som är extremt användbar vid felsökning: namn på funktioner, globala variabler, beskrivningar av strukturer. Felsökningssymboler är tillgängliga för alla körbara filer Windows operativsystem.

Exekveringskontroll hänvisar till förmågan att avbryta och återuppta exekvering av programkod när den når givet kommando i programkoden. Om programkoden exekveras i steg-för-steg-läge, inträffar ett avbrott för varje programmeringsspråkstoken eller när en subrutin avslutas. I fri exekvering inträffar exekveringsavbrott i förutbestämda avsnitt av kod - platser där brytpunkter är inställda.

När du avbryter kärnlägeskod uppstår följande dilemma. Debuggern använder ett användargränssnitt för att interagera med programmeraren. De där. åtminstone den synliga delen av felsökaren körs i användarläge och använder naturligtvis ett applikationsprogrammeringsgränssnitt (Windows API), som i sin tur förlitar sig på kärnlägesmoduler, för att bygga det. Att pausa kärnlägeskod kan därför resultera i ett dödläge: systemet kommer att sluta svara på användarförfrågningar.

För att komma åt kärnminne måste delar av felsökaren också köras i kärnläge. Detta leder till två problem samtidigt, vilket är en uppenbar konsekvens av att organisera minnet i processorns skyddade läge.

Det första problemet gäller översättningen av virtuella minnesadresser. Drivrutiner interagerar ständigt med applikationer i användarläge genom att komma åt deras minne. Operativsystemet Windows översätter virtuella adresser till fysiska baserat på konceptet trådkontext. Trådkontext är en struktur som återspeglar tillståndet för en tråd och inkluderar i synnerhet en uppsättning register och viss annan information. När kontrollen överförs till en annan tråd sker en kontextväxling som sparar information om en tråd och återställer information om en annan. När en tråds kontext växlas till en annan processs tråd, växlar sidkatalogen som används för att översätta virtuella adresser till fysiska.

Det speciella är att när man skickar systemsamtal Windows-operativsystemet byter inte sammanhang. Detta tillåter kärnlägeskod att använda virtuella adresser i användarläge.

Situationen är annorlunda när man skickar avbrott eller exekverar systemtrådar. Ett avbrott kan inträffa när som helst, så det finns inget sätt att förutsäga vilken trådkontext som kommer att användas. Systemtrådar tillhör inte någon process och kan inte översätta virtuella adresser i användarläge. Det följer att användarlägesminnet inte kan nås i dessa situationer.

Det andra problemet är att komma åt flyttbart minne. Det mesta av informationen i minnet är flyttbar och kan flyttas från fysiskt minne till HDD till en sidfil. Om en sida nås som inte finns i fysiskt minne, skulle processorn normalt generera ett Page Fault-avbrott, som skulle hanteras av minneshanteraren, vilket resulterar i att sidan läses från sidfilen och laddas in i det fysiska minnet.

Detta beteende går sönder om felsökningskoden tvingas använda höga avbrottsbegärannivåer (IRQL). Om IRQL matchar eller överskrider IRQL för minneshanteraren, kommer den senare inte att kunna ladda den saknade sidan, eftersom operativsystemet kommer att blockera Page Fault-avbrottet. Detta kommer att få operativsystemet att krascha.

Felsökning delas vanligtvis in i interaktiv och nödsituation. Vid interaktiv lokal felsökning körs felsökaren på samma system som felsökaren. I interaktiv fjärrfelsökning exekveras debuggern och felsökningsobjektet i olika system. Vid felsökning av kärnkod måste systemet styras från de första stegen av uppstarten, när nätverket ännu inte fungerar, därför enkelt seriella gränssnitt, såsom COM, FireWire, USB. I Nyligen, tack vare trender i utvecklingen av mjukvaruvirtualisering på olika abstraktionsnivåer, lockas virtuella maskiner alltmer. Gästoperativsystemet fungerar som felsökningsoperativsystemet, det värdbaserade operativsystemet inkluderar ett användargränssnitt för felsökning.

Därför kräver nödfelsökning inte att felsökningsverktyget är installerat på testdatorn. Distributionen av Windows-operativsystem inkluderar mekanismer för implementering av nödfelsökning. Innan omstart kan operativsystemet spara information om dess tillstånd, som utvecklaren kan analysera och ta reda på orsaken till. Sådan information som sparas i en fil kallas en minnesdump.

Grundläggande felsökningsverktyg i kärnläge tillhandahålls av Windows-operativsystemtillverkaren själv som en del av det kostnadsfria paketet Debugging Tools. för Windows" Verktygen inkluderar grafiska och konsolfelsökare WinDbg respektive KD (hädanefter kallad Windows Debugger). Arbetet med dessa debuggers är baserat på mekanismer som tillhandahålls av operativsystemutvecklarna och inbäddade i dess kärna.

Huvudläget för Windows Debugger är kommandotolkningsläge. Tack vare den modulära strukturen, tillsammans med de som tillhandahålls av utvecklarna Windows-kommandon Debugger stöder tredjepartsmoduler som kallas tillägg. Faktum är att de flesta inbyggda kommandon också är paketerade som tillägg.

Windows Debugger är fokuserat på interaktiv fjärr- och nödfelsökning, som, när den används, avslöjar alla dess möjligheter. Samtidigt stöds inte fullständig lokal interaktiv felsökning: felsökaren låter dig bara se vissa kärnstrukturer.

Det finns en tilläggsmodul för Windows Debugger som heter LiveKD, skapad av Mark Russinovich, som på sätt och vis implementerar lokal interaktiv felsökning. LiveKD skapar en minnesdump i farten fungerande system och använder den för felsökning.

Paketet Debugging Tools for Windows uppdateras regelbundet och stöder alla moderna Windows-operativsystem.

SoftICE kärnfelsökare, producerad av Compuware i programvaran DriverStudio, har traditionellt varit ett alternativ till paketet Debugging Tools for Windows. Särskiljande drag SoftICE var en implementering av lokal interaktiv felsökning på hårdvara som stöds. Debuggern kunde nästan helt kontrollera driften av operativsystemet.

Från och med den 3 april 2006 avbröts försäljningen av DriverStudio-produktfamiljen på grund av "många tekniska och affärsmässiga problem, samt allmäntillstånd marknadsföra". Den senaste versionen av operativsystemet som stöd har implementerats för är Windows XP Service Pack 2. Vanligtvis paket tjänstuppdateringarändra inte applikationsgränssnitt operativsystem, men systemanropsnummer och annan odokumenterad information kan ändras. SoftICE-debuggern förlitade sig på hårdkodade adresser till interna datastrukturer. Som ett resultat bröts kompatibiliteten med lanseringen av Service Pack 3. Uppenbarligen mer senare versioner Windows-operativsystem stöds inte heller.

Syser Kernel Debugger skapades av ett litet kinesiskt företag Sysersoft som en ersättning för SoftICE-felsökaren. Den första slutversionen släpptes 2007. Liksom SoftICE kan Syser Kernel Debugger interaktiv felsökning på ett körande system. Endast 32-bitarsversioner stöds moderna versioner Windows.

det här ögonblicket Windows Debugger är ett häftverktyg bland utvecklare av kärnmoduler. Det används också av Windows-operativsystemets kärnteam.

chPF OELPFPTSCHE KHLBBOYS RP TBVPFE U PFMBDLPK SDTB U BCHBTYKOSHNY DBNRBNY RBNSFY. lBL RTBCHYMP, CHBN OHTSOP VKDEF ЪBDBFSH PDOP YЪ KHUFTPKUFCH RPDLBYULY, RETEYUYUMEOOSCHI CH ZHBKME /etc/fstab . uvtpu pvtbpch RBNSFY O KHUFTPKUFCHB, OE SCHMSAEYEUS KHUFTPKUFCHBNY RPDLBYULY, OBRTYNET, MEOFSHCH, CH DBOOSCHK NPNEOF OE RPDDETSYCHBAFUS.

Notera: yURPMSHHKFE LPNBODH dumpon (8) DMS KHLBBOYS SDTH NEUFB, ZDE OHTsOP UPITBOSFSH BCHBTYKOSHCHE DBNRSCH. rPUME OBUFTPKLY RP LPNBODE swapon (8) TBDEMB RPDLBYULY DPMTSOB VSHFSH CHSHCHBOB RTPZTBNNNB dumpon . pVSHYUOP LFP CHSHRPMOSEPHUS ЪBDBOYEN RETENOOOPK dumpdev CH ZHBKME rc.conf (5). еUMY ЪБДБOB ьФБ RATENEOOBS, FP RPUME UVPS RTY RETCHPK NOPZPRPMSHЪPCHBFEMSHULPK RETEЪBZTHЪLE VHDEF BCHFPNBFYUEULY ЪBRHEEOOB RTPZTBNNNB savecore (8). pOB UPITBOIF BCHBTYKOSHCHK DBNR SDTB CH LBFBMPZ, ЪBDBOOSCHK CH RETENEOOOPK dumpdir ZHBKMB rc.conf . rP KHNPMYUBOYA LBFBMPZPN DMS BCHBTYKOSCHI DBNRPCH SCHMSEFUS /var/crash .

mYVP CHSC NPTSEFE ЪBDBFSH KHUFTPKUFCHP DMS UVTPUB PVTBB RBNSFY SCHOP YUETE RBTBNEFT dump CH UFTPLE config LPOZHYZHTBGYPOOPZP ZHBKMB CHBYEZP SDTB. fBLPK URPUPV YURPMSHЪPCHBFSH OE TELPNEODHEFUS Y BY DPMTSEO YURPMSHЪPCHBFSHUS, FPMSHLP EUMY CHSCH IPFYFE RPMKHYUBFSH BCHBTYKOSHCH PVTBSCH RBNSFY SDTB, RPFPTPE BCHBPACHBTYKTYP LE.

Notera: dBMEE FETNYO gdb PYOBYUBEF PFMBDYUYL gdb , ЪBRHEEOOSCHK CH ``TETSINE PFMBDLY SDTB". RETEIPD CH LFPF TETSYN DPUFYZBEFUS ЪBRHULPN gdb U RBTBNEFTPN -k . h TETSYNE PFMBDLY SDTB gdb YЪNEOSEF UCHPЈ RTYZMBYEOYE OM (kgdb) .

Dricks: eUMY CHSH YURPMSHJHEFE FreeBSD CHETUYY 3 YMY VPMEE TBOOAA, CHCH DPMTSOSCH CHSHRPMOYFSH HUEYEOYE PFMBDPUOPZP SDTB LPNBODPK-remsa, B OE KHUFBOBCHMYCHBFSH VPMSHYPE PFMBDPUOPE SDTP

# cp kernel kernel.debug # strip -g kernel

bFPF YBZ OE FBL KhTS Y OEPVIPDYN, OP TELPNEODKHEN. (PH FreeBSD 4th VPMEE TEMYYBI LFPF YBZ CHSPRMOSEFUS BCHFPNBFYUEULY CH LPOGE RTPGEUUB RPUFTPEOOYS SDTB make .) lPZDB SDTP HUEYEOP, BCHFPNBFYUEUY YMRT Y RPFENBFYUEULY CH LPOGE RTPGEUUB RPUFTPEOOYS SDTB SCHN PVTBBPN, OVTTBCH gör installera .

ъBNEFSHFE, YuFP CH UFBTSHCHETUISI FreeBSD (DP 3.1, OE CHLMAYUBS LFPF TEMY), YURPMSHHEFUS SDTB CH ZHTNBFE a.out, RPFPNH YI FBVMYGSH UYNCHPMPCH DPMTSOSCH TBURPMBZBFSOPY CH RPURPMBZBFSOPY CH RPURPMBZBFSOPY. u VPMSHYPK FBVMYGEK UYNCHPMPCH CH OE HUEYOOOPN PFMBDPUOPN SDTE LFP YЪMYYOSS FTBFB. rPUMEDOYE TEMYYSH FreeBSD YURPMSHJHAF SDTB CH ZHTNBFE ELF, ZHE LFP OE SCHMSEFUS RTPVMENPK.

eUMY CHCH FEUFYTHEFE OPChPE SDTP, ULBTSEN, OBVYTBS YNS OPCHPZP SDTB CH RTYZMBYYE OYBZTHYUYLB, OP CHBN OHTSOP ЪBZTHTSBFSH Y TBVPFBFSH U DTHZYN SDTBCHPHNBY, OPCHBNCHFSHPNY A, ЪBZTHTSBKFE EZP FPMSHLP CH PDOPRPMSHЪPCHBFEMSHULPN TETSYNE RTY RPNPEY ZHMBZB -s , KHLBSCCHBENPZP RTY ЪБЗТХ JLE, B ЪBFEN CHSHCHRPMOYFE FBLYE YBZY:

# fsck -p # montera -a -t ufs # så ditt filsystem för /var/crash är skrivbart # savecore -N /kernel.panicked /var/crash # exit # ...till flera användare

bFB RPUMEDPCHBFEMSHOPUFSH KHLBSCCHBEF RTPZTBNNE savecore (8) OM YURPMSHЪPCHBOYE DTHZPZP SDTB DMS YЪCHMEYUEOYS UYNCHPMYUEULYI YNEO. YOBYUE POB VKhDEF YURPMSHЪPCHBFSH SDTP, TBVPFBAEE CH DBOOSHK NPNEOF Y, ULPTEE CHUEZP, OYUEZP OE UDEMBEF, RPFPNH YuFP BCHBTYKOSHCHK PVTB RBNSFY YYNCHPMSCH SDTBUS F PFMYUBFSHUS.

b FERETSH, RPUME UVTPUB BCHBTYKOPZP DBNRB, RETEKDYFE CH LBFBMPZ /sys/compile/WHATEVER Y ЪBRKHUFYFE LPNBODH gdb -k . yЪ RTPZTBNNSH gdb UDEMBKFE CHPF SFP:

Symbol-fil kernel.debug exec-fil /var/crash/kernel.0 core-file /var/crash/vmcore.0 Y CHBMS - CHCH NPTSEFE PFMBTSYCHBFSH BCHBTYKOSHK DBNR, YURPMSHЪHS YUIPDOSCH FELUFSCH SDTB LFPuOP CH FBLCE MAVPC DTHZPK RTPZTBNNPK.

chPF TsKHTOBM LPNBOD UEBOUB TBVPFSH gdb, YMMAUFTYTHAEIK bfh RTPGEDHTH. dMYOOSCH UFTPLY VSHMY TBPTCHBOSH DMS KHMHYUYEOYS YUYFBVEMSHOPUFY Y DMS KHDPVUFCHB UFTPLY VSHCHMY RTPOKHNETPCHBOSHCH. CHUE PUFBMSHOPE SCHMSEFUS FTBUUYTPCHLPK PYYVLY, TEBMSHOP CHPOYLOKHCHYEK PE CHTENS TBVPFSCH OBD DTBKCHETPN LPOUPMY pcvt.

1:Skript startade den fre 30 december 23:15:22 1994 2: # cd /sys/compile/URIAH 3: # gdb -k kärna /var/crash/vmcore.1 4:Läser symboldata från /usr/src/ sys/compile/URIAH/kernel ...klar. 5:IdlePTD 1f3000 6:panik: för att du sa till! 7:nuvarande pcb vid 1e3f70 8:Inläsning av symboler för ../../i386/i386/machdep.c...klar. 9: (kgdb) där 10:#0 start (arghowto=256) (../../i386/i386/machdep.c linje 767) 11:#1 0xf0115159 i panik () 12:#2 0xf01955bd in diedie ) (../../i386/i386/machdep.c linje 698) 13:#3 0xf010185e i db_fncall () 14:#4 0xf0101586 i db_command (-2665091309, -2661, -5165, -5165) 7 f0101711 i db_command_loop () 16:#6 0xf01040a0 i db_trap () 17:#7 0xf0192976 i kdb_trap (12, 0, -272630436, -266743723) 18:#19_0fx 019ce60 in trap_pfault ( ...) 20:#10 0xf019cb2f i trap (...) 21:#11 0xf01932a1 i undantag: calltrap () 22:#12 0xf0191503 i cnopen (...) 23:#13 0xf0132c_openc 24: #14 0xf012d014 i vn_open () 25:#15 0xf012a183 i öppen () 26:#16 0xf019d4eb i syscall (...) 27: (kgdb) upp 10 28: Läser in.3./ symboler för i.3./i. /i386 /trap.c...klar. 29:#10 0xf019cb2f i fälla (frame=(tf_es = -260440048, tf_ds = 16, tf_\ 30:edi = 3072, tf_esi = -266445372, tf_5 = 3.272, tf_52, tf_52, 3 630396, tf_ebx = - 266427884, tf_edx = 12, tf_ecx = -266427884, tf\ 32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, -2_6 664693 68, tf_eflags = 66066, tf_esp = 3072 , tf_\ 34:ss = -266427884)) (../../i386/i386/trap.c rad 283) 35:283 (void) trap_pfault(&frame, FALSE); 36: (kgdb) frame frame->tf_ebp frame->tf_eip 37:Inläsning av symboler för ../../i386/isa/pcvt/pcvt_drv.c...klar. 38:#0 0xf01ae729 i pcopen (dev=3072, flagga=3, mode=8192, p=(struct p\ 39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403) 40:403 retur ((*linesw.l_open)(dev, tp)); 41: (kgdb) lista 42:398 43:399 tp->t_state |= TS_CARR_ON; 44:400 tp->t_cflag |= KLOKAL; /* kan inte vara ett modem (:-) */ 45:401 46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200) 47:403 retur ((*linesw.l_open)(dev, tp)); 48:404 #else 49:405 retur ((*linesw.l_open)(dev, tp, flagga)); 50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */ 51:407 ) 52: (kgdb) print tp 53:Inläsning av symboler för ../../i386/i386/cons.c...klar. 54:$1 = (struct tty *) 0x1bae 55: (kgdb) print tp->t_line 56:$2 = 1767990816 57: (kgdb) upp 58:#1 0xf0191503 i cnopen (dev=03,=00802-läge) , p=(st\ 59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c rad 126) 60: retur ((*cdevsw.d_open)(dev, flagga, läge, p) ); 61: (kgdb) upp 62:#2 0xf0132c34 i spec_open () 63: (kgdb) upp 64:#3 0xf012d014 i vn_open () 65: (kgdb) upp 66:#4 0xf012a183: (kgd)b 67: (kgd) upp 68:#5 0xf019d4eb i syscall (frame=(tf_es = 39, tf_ds = 39, tf_edi =\ 69: 2158592, tf_esi = 0, tf_ebp = -272638436, 8tf = -272638436, 8 :_ebx = 708 6, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, 7 = 39)) (. ./../i386/i386/trap.c linje 673) 73:673 error = (*callp->sy_call)(p, args, rval); 74: (kgdb) upp 75:Initial ram vald; du kan inte gå upp. 76: (kgdb) quit 77: # exit 78:exit 79: 80:Script gjort på fre 30 dec 23:18:04 1994

lPNNEOFBTYY L CHSHCHYYERTYCHEDEOOPNH TSHTOBMKH:

UFTPLB 6:

ьФП DBNR, CHSFSHCHK RTY RPNPEY DDB (UNPFTY OITSE), RPPFPNH LPNNEOFBTYK L BCHBTYKOPNH PUFBOPCHH YNEEF YNEOOP CHYD ``för att du sa till!'' Y FTBUUYTPCHLB UFELB ZMHVPLB; PDOBLP YOBYUBMSHOPK RTYYUYOPK RETEIPDB CH DDB VSHMB BCHBTYKOBS PUFBOPCHLB RTY CHPOYLOPCHEOYA PYYVLY UFTBOIGSC RBNSFY.

UFTPLB 20:

lFP NEUFPOBIPTSDEOOYE ZHKHOLGYY trap() CH FTBUUYTPCHLE UFELB.

UFTPLB 36:

rTYOKHDIFEMSHOPE YURPMSHЪPCHBOIE OPChPK ZTBOYGSCH UFELB; FERTSH LFP OE OHTSOP. rTEDRPMBZBEFUS, YuFP ZTBOYGSCH UFELB KHLBSCCHBAF OM RTBCHYMSHOP TBURPMPTSEOYE, DBCE CH UMHUBE BCHBTYKOPZP PUFBOPCHB. zMSDS OM UFTPLH YUIPDOPZP LPDB 403, NPTsOP ULBBFSH, YuFP CHEUSHNB CHETPSFOP, YuFP MYVP CHYOPCHBF DPUFHR RP KHLBBFEMA ``tp"", MYVP VSHM CHSHCHIPD ЪB ZТBOYGSC NBUUYCH.

UFTPLB 52:

rPIPTSE, YuFP CHYOPCHBF KHLBBFEMSH, OP PÅ SCHMSEFUS DPRKHUFYNSCHN BDTEUPN.

UFTPLB 56:

pDOBLP, PYUECHYDOP, UFP PÅ KHLBSCCHBEF OM NHUPT, FBL UFP NSCH OBYMY OBYKH PYYVLH! (DMS FEI, LFP OE OBLPN U LFPC YUBUFSHHA LPDB: tp->t_line UMHTSYF DMS ITBOEOYS TETSYNB LBOBMSB LPOUPMSHOPZP HUFTPKUFCHB, Y LFP DPMTSOP VshchFSH DPUFBFPYuOP NBMEBUHLYUM.)







2024 gtavrl.ru.