Felsökning av Windows-kärnan vad. Hur operativsystemets kärnfelsökning fungerar


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 debuggers beskrivs kortfattat i följande avsnitt.

Debugger WDBEB386

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.

Debuggern WDEB386 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 felsökning källkod och andra trevliga egenskaper som Visual C++ och Visual Basic-felsökningarna skämde bort oss med.

Punktkommandon (DOT) är den viktigaste funktionen hos WDEB386. Genom avbrott INT 41 kan WDEB386 utökas för att lägga till kommandon. Denna utökningsmöjlighet gör det möjligt för författare av VxD-drivrutiner att 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.

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 finns 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.

Denna artikelserie dök upp av två anledningar. För det första gillar jag att jobba med projektet HackSysExtremeVulnerableDriver. För det andra fick jag många önskningar för att täcka detta ämne.

All kod som används för att skriva den här serien finns i mitt arkiv.

I denna cykel I den här artikeln kommer vi att titta på hur vi skriver exploater på kärnnivå i Windows. Det är viktigt att notera att vi kommer att hantera kända sårbarheter och att det inte finns något behov av reverse engineering (av minst, för föraren).

Det förväntas att efter att ha läst alla artiklarna kommer du att känna till alla de vanligaste klasserna av sårbarheter och metoder för exploatering, och att du även kommer att kunna porta exploits från x86-arkitektur till x64-arkitektur (om möjligt) och bli bekant med nya skyddsmetoder i Windows 10.

Kernel debug krets

Till skillnad från felsökning på användarnivå, som avbryter exekveringen av en enda process, involverar felsökning på kärnnivå hela systemet, och vi kommer inte att kunna använda den här metoden. Följaktligen behövs en separat felsökningsmaskin som kan kommunicera med systemet där kärnan avlusas, se minnes- och kärnstrukturer och även fånga systemkrascher.

Ytterligare material att studera:

Utnyttja kärnans sårbarheter

Denna process är mycket roligare än att arbeta på användarnivå J.

Huvudmålet är att uppnå privilegierad exekvering i kärnan. Och sedan beror allt på vår fantasi, från en fest med hemgjord öl till introduktionen av statligt sponsrad skadlig programvara.
I allmänhet är vår uppgift att skaffa ett skal med systemprivilegier.

Ämnen för artiklar i denna serie

  • Del 1: Installation arbetsmiljö
    • Konfigurerar tre virtuella maskiner och ett system som ska fungera som en debugger.
    • Konfigurera WinDBG debugger.
  • Del 2: Nyttolaster
    • Utforska de vanligaste nyttolasterna. Efterföljande delar kommer att behandla specifika sårbarheter och, där så är lämpligt, tillhandahålla länkar till den här artikeln.
  • Resterande delar.
    • Hänsyn till sårbarheter.

Utnyttjande av kärnans livscykel

  • Att hitta en sårbarhet. Detta ämne kommer inte att diskuteras i den här serien, eftersom vi redan vet exakt var luckorna finns.
  • Avlyssning av avrättningstråden. Vissa sårbarheter involverar kodexekvering, och vissa har ytterligare krav.
  • Upptrappning av privilegier. Huvudmålet är att få ett skal med systemprivilegier.
  • Återställer utförandetråden. Okontrollerade undantag på kärnnivå gör att systemet kraschar. Om du inte ska skriva en exploit för en DoS-attack bör du ta hänsyn till detta.

Typer av målsystem

Vi kommer att arbeta med sårbarheter i följande system (den specifika versionen är inte viktig):

  • Win7 x86 VM
  • Win7 x64 VM
  • Win10 x64 VM

Låt oss börja med x86-arkitekturen, och sedan kommer vi att porta exploateringen för Win7 x64-systemet. Vissa utnyttjar kommer inte att köras på Win10-maskiner på grund av förekomsten av nya skydd. I det här fallet kommer vi antingen att ändra logiken i utnyttjandet eller använda ett helt annat tillvägagångssätt.

Använd programvara:

  • Hypervisor (många alternativ).
  • Windows 7 x86 VM
  • Windows 7 x64 VM
  • Windows 10 x64 VM

Konfigurera system för felsökning

Felsökningssystemen vi kommer att interagera med är designade för att ladda den sårbara drivrutinen. Dessa maskiner kommer att krascha ofta, eftersom de flesta undantag i kärnan bidrar till denna typ av fenomen. Det är nödvändigt att allokera tillräckligt random access minne för dessa system.

På varje maskin som ska felsökas måste du göra följande:

  • Kör filen target\vminstall.exe i VirtualKD-katalogen. En ny startpost kommer att läggas till och felsöka och automatisk anslutning till VirtualKD-servern som är installerad på systemet, som fungerar som en debugger.

I fallet med Windows 10 VM måste du aktivera testsigneringsläge, vilket gör att du kan ladda osignerade drivrutiner till kärnan.

Efter att ha kört bcdedit /set testsinging på kommandot och startat om, kommer "Testläge" att visas på skrivbordet.

Kort beskrivning HEVD-modul

DriverEntry-proceduren är startproceduren för varje förare:

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) (
UINT32 i = 0;
PDEVICE_OBJECT DeviceObject = NULL;
NTSTATUS Status = STATUS_UNSUCCESSFUL;
UNICODE_STRING DeviceName, DosDeviceName = (0);

UNREFERENCED_PARAMETER(RegistryPath);
PAGED_CODE();

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

//Skapa enheten
Status = IoCreateDevice(DriverObject,
0,
&Enhetsnamn,
FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SECURE_OPEN,
FALSK
&DeviceObject);

  • Denna procedur innehåller ett anrop till funktionen IoCreateDevice, som innehåller namnet på drivrutinen som vi kommer att använda under kommunikationen.
  • De nödvändiga strukturerna och funktionspekarna kommer att läggas till DriverObject-objektet.
  • Det som är viktigt för oss är funktionspekaren förknippad med DriverObject->MajorFunction-proceduren, som ansvarar för bearbetning av IOCTL (I/O Control);
  • I HEVD kallas denna funktion IrpDeviceIoCtlHandler, vilket är ett stort villkorligt uttryck med många grenar för varje IOCTL. Varje sårbarhet har en unik IOCTL.

Exempel: HACKSYS_EVD_IOCTL_STACK_OVERFLOW är en IOCTL som används för att utlösa en stackoverflow-exploatering.

Detta avslutar den första delen. I nästa artikel kommer vi att prata om nyttolaster. På det här ögonblicket Den enda tillgängliga nyttolasten är en designad för att stjäla tokens, som kommer att användas i den tredje delen.

P.S. Jag förstår att det finns många krångligheter och problem som du kan stöta på. Eftersom den här serien fokuserar på att utveckla exploateringar, måste du lösa alla relaterade problem själv. Däremot kan du ställa alla frågor du har i kommentarerna.

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 VSHCHFSH 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 BCHBPACHVPBE THBTYKUP 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 YURPMSH'HEFE FreeBSD CHETUYY 3 YMY VPMEE TBOOAA, CHCH DPMTSOSCH CHSHRPMOYFSH HUEYEOYE PFMBDPUOPZP SDTB LPNBODPK-remsa, B OE KHUFBOBCHMYCHBFSH VPMSHYPE PFMBDPUOPE SD

# cp kernel kernel.debug # strip -g kernel

bFPF YBZ OE FBL KhTS Y OEPVIPDYN, OP TELPNEODKHEN. (PH FreeBSD 4:e VPMEE TEMYYBI LFPF YBZ CHSHRMOSEFUS BCHFPNBFYUEULY CH LPOGE RTPGEUUB RPUFTPEOOYS SDTB fabrikat .) lPZDB SDTP HUEYEOP, BCHFPNBFYUEULY YMY RT Y RPFENBFYUEULY CH LPOGE RTPGEUUB RPUFTPEOOYS SDTB fabrikat OSCHN 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 TBURPMBZBFSOPHU S RPURPMBZBFSOPHU S RPURPMBZBFSOPHU. 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 ЪБЗТХ ЪLE, B ЪBFEN CHSHRPMOYFE 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 SDTB 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 kärnfil /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ТBOYGBSC 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.)

  • Författare:

    Barinov S.S., Shevchenko O.G.

  • År:
  • Källa:

    Datavetenskap och Datorteknologier/ Material från VI International vetenskaplig och teknisk konferens 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 som tillämpas på operativsystemet Microsoft Windows, belyses skillnaderna och problemen med att organisera felsökning av den senare. 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. En analys av befintliga lösningar för att uppfylla kraven har genomförts. Särskilt, Särskild uppmärksamhet tillägnad 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ägeskoden 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 systemanrop skickas byter inte Windows-operativsystemet sammanhanget. Detta tillåter kärnlägeskod att använda virtuella adresser i användarläge.

Situationen är annorlunda när man skickar avbrott eller kör 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 kan flyttas och kan när som helst flyttas från det fysiska minnet till hårddisken 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 används enkla seriella gränssnitt som COM, FireWire, USB för att kommunicera mellan system. 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 felsökningsgränssnitt.

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 för kärnläge tillhandahålls av Windows-operativsystemtillverkaren själv som en del av det kostnadsfria felsökningspaketet. Verktyg 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ökaren, producerad av Compuware i programvaran DriverStudio, har traditionellt varit ett alternativ till paketet Debugging Tools for Windows. Utmärkande 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 "en mängd olika tekniska och affärsmässiga problem, såväl som allmänna marknadsförhållanden." Senaste versionen 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 stöds inte heller senare versioner av Windows-operativsystemet.

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

För närvarande är Windows Debugger huvudverktyget bland utvecklare av kärnmoduler. Det används också av Windows-operativsystemets kärnteam.

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. Allmänt felsökningsproblem

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. Bara 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å en Microsoft Windows-felsökare som gör nästan allt en riktig systemfelsökare gör, inklusive att manipulera symboltabeller, hantera brytpunkter, generera disassemblerkod och koordinera med ett grafiskt användargränssnitt (GUI). När vi diskuterar WDBG kommer vi att visa hur brytpunkter fungerar och diskutera vad brytpunkter är. olika filer symboler (symbolfiler).

Innan vi går vidare till huvudmaterialet i det här kapitlet, låt oss definiera två standardtermer som kommer att användas ofta i den här boken: huvud- (eller bas-) debugger (debugger) och underordnad debugger (debuggee). 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 överordnade processen och slavfelsökaren kallas underprocessen.

En debugger (debugger, engelsk debugger from bug) är ett datorprogram som är designat 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 det här lägets debuggers designade för att felsöka applikationer i användarläge. Ett utmärkt exempel på en felsökare i användarläge är felsökaren Microsoft Visual C++. Kärnlägesfelsökare, 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-debugging applikationsprogrammeringsgränssnittet (debugging 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. Huvudfelsökaren är begränsad till att endast felsöka slavfelsökaren och alla processer som den skapar (om huvudfelsökaren stöder underordnade processer).

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

För tolkade språk och körtidssystem som använder virtuell maskin, den fullständiga felsökningsmiljön tillhandahålls av de virtuella maskinerna själva, och de använder inte Win32 felsöknings-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-kodstolk i Microsoft system Visual Basic.

debugger kärna operativsystem

Vi kommer till felsökning i Visual Basic i kapitel 7, men var medveten om att Visual Basics p-kodgränssnitt 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 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ökare, 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 debuggers 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 Windows 98 virtuella enhetsdrivrutiner (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. Den var svår 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.

Punktkommandon (DOT) är den viktigaste funktionen hos WDEB386. Genom avbrott INT 41 kan WDEB386 utökas för att lägga till kommandon. Denna utökningsmöjlighet gör det möjligt för författare av VxD-drivrutiner att 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 påpeka en mycket användbart alternativ- Visa lastarsnäppar. 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. Windows 2000-tjänster och out-of-process COM-servrar faller i denna kategori. 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 arbetaren Windows bord 2000.

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 av 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.

På Windows NT 4 snabbtangent avbryter 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







2024 gtavrl.ru.