Princip operativnog sistema CORE DEBUGGER. Otklanjanje kernela moda operativnog sistema Windows Šta je uklanjanje pogrešaka kernela

Kako pokrenuti kernel debugger?

Odgovor gospodara:

U procesu razvoja softvera postoji jedna vrlo važna komponenta - ovo je uklanjanje pogrešaka. U odnosu na aplikativne programe, provodi se putem kojih rade u korisničkom režimu i često ugrađeni u IDE. Da bi se moglo odstupiti, na primjer, vozač, treba pokrenuti kernel pogrešac.

Morate pokrenuti CMD naredbeni procesor. Otvorite izbornik Start na traci zadataka. U prozoru koji se pojavljuje kliknite na "Run ...". Pojavi se prozor "Početni program". U tekstni okvir unesite CMD, a zatim kliknite gumb "OK".

Sada stvorite sigurnosnu kopiju datoteke Boot.ini. Prvo saznajte put ugradnje trenutne kopije Windows-a pomoću naredbe: Echo% SystemRoot%

Zatim idite na disk, s instaliranim operativnim sistemom unošenjem liste uređaja, a nakon njih, stavljajući dvotoc. Pomoću naredbe CD-a idite u korijenski direktorij. Sada pomoću naredbe Attrib uklonite "skrivene" atribute, "i" sistem "i" sistem "iz datoteke Boot.ini. Kopirajte naredbu Kreirajte sigurnosnu kopiju, a zatim postavite atribute na mjesto.

Da biste uklonili popis opcija za preuzimanje, koristite COOTCFG / Query naredbu. Pogledajte listu i definirajte taj predmet na osnovu kojeg će se stvoriti nove postavke s mogućnošću uklanjanja pogrešaka u režimu kernela. Identifikator zapisa za pokretanje treba pamtiti.

Upotrijebite naredbu za pokretanje / kopiranje / kopiranje za kreiranje zapisa za pokretanje. Da biste odredili identifikator snimanja koji ćete kopirati, koristiti / ID parametar. Upotreba parametra / D postavite ime snimanja koje će se prikazati. Sada se morate vratiti na popis opcija preuzimanja pomoću naredbe za bloycfg / upit i pogledajte dodani identifikator unosa.

Sada morate omogućiti opcije da biste pokrenuli kernel pogrešac na prethodno kreirani zapis za pokretanje. Ako se uklanjate pogrešku na ciljnoj mašini, morate samo dodati opciju / pogrešaka.

Ako želite implementirati daljinsko uklanjanje pogrešaka sa priključkom ciljanog računara putem COM porta do mašine za domaćin, a zatim pomoću opcija / port / baud za određivanje broja porta i kurs.

Ako se na daljinu uklanjate kroz firewire kabel (IEEE 1394 sučelje), a zatim kako biste omogućili odgovarajući režim, koristite opciju / DBG1394 i za određivanje opcije / ch.

Da biste bili sigurni da su promjene izvršene, provjerite pokretanje pomoću COOTCFG naredbe s / parametrom upita. Stavljanjem izlazne naredbe zatvorite prozor naredbenog procesora.

Ako je potrebno, promijenite postavke pokretanja operativnog sistema. Otvorite upravljačku ploču putem startnog menija i otvorite je "sistem" element već u njemu. U prozoru "Svojstva sistema" koji se otvori, odaberite karticu Napredno. Na ovoj kartici odaberite odjeljak s imenom "Preuzmi i oporavak" i kliknite na gumb "Parameters". U prozoru "učitavanje i oporavak" koji se pojavljuje, morate aktivirati opciju "Prikaz liste operativnih sistema". Zatvorite oba dijaloška okvir sa gumbom "OK".

Izvršite računar za ponovno pokretanje. Odaberite Učitavanje sa uklanjanjem pogrešaka. Prijavite se u sustav i počnite raditi na ciljnoj mašini ili pokrenuti daljinsko uklanjanje pogrešaka. Iskoristite sredstva kao WindBG i KD.

Ova serija članaka pojavila se iz dva razloga. Prvo, volim raditi s projektom HacksysextremeVuLneraAbledriver . Drugo, imam masovne želje Da osvijetlite ovu temu.

Čitav kôd koji se koristi pisanje ove serije je u mom spremištu.

U ovom ciklusu članaka razmotrit ćemo pisanje eksploata nivoa kernela u Windows-u. Važno je napomenuti da ćemo se baviti poznatim ranjivostima, a obrnutim inženjerstvom nema potrebe (barem za vozača).

Pretpostavlja se da ćete nakon upoznavanja sa svim člancima znati sve najčešćim klasama i metodama rada, a također moći da port iskoriste iz X86 arhitekture na X64 arhitekturu (ako je moguće) i pročitajte najnovije načine zaštite u Windows 10.

Shema uklanjanje pogrešaka kernel

Za razliku od uklanjanja pogrešaka na nivou korisnika, kada je izvršenje zasebnog procesa obustavljen, čitav sistem aktivira se na nivou kernela, a mi nećemo moći koristiti ovu metodu. U skladu s tim, potrebna vam je zasebna mašina za uklanjanje pogrešaka koja može komunicirati s sustavom gdje se kernel otkupi, pogledajte memoriju i strukturu kernela, kao i uhvate boje sistema.

Dodatni materijal za studiju:

Rad ranjivosti kernela

Ovaj proces je mnogo zabavniji od rada na nivou korisnika J.

Glavni cilj je postizanje povlaštenog izvršenja u kontekstu kernela. A onda sve ovisi o našoj mašti, u rasponu od kućnih ljubimaca s domaćim pivom i završavajući uvođenjem zlonamjernosti sponzoriranom od strane države.
Općenito, naš zadatak je dobiti školjku sa sustavnim privilegijama.

Teme od članaka ovog ciklusa

  • Dio 1: Postavljanje radnog okruženja
    • Konfiguriranje tri virtualne mašine i sustave koji će djelovati kao uklanjanje pogrešaka.
    • Konfiguriranje WindBG pogrešača.
  • Dio 2: Korisna opterećenja
    • Proučavanje najčešćih korisnih tereta. U narednim dijelovima će se razmotriti posebne ranjivosti i, ako je potrebno, odnositi na ovaj članak.
  • Ostali dijelovi.
    • Razmatranje ranjivosti.

Životni ciklus razvoja nivoa nivoa jezgre

  • Pronalaženje ranjivosti. Ova tema neće se smatrati u ovom ciklusu, jer već znamo tačno gdje se barovi nalaze.
  • Presretanje protoka izvršenja. Neke ranjivosti predviđaju izvršenje kodeksa, za neke su dodatne zahtjeve.
  • Proširenje privilegija. Glavni cilj je dobiti školjku sa sistemskim privilegijama.
  • Vraćanje protoka izvršenja. Neodgovarajući izuzeci na nivou kernela dovode do kolapsa sistema. Ako nećete napisati Exploit za napadom DOS-a, ovu činjenicu treba uzeti u obzir.

Vrste ciljnih sistema

Radit ćemo s ranjivostima u sljedećim sustavima (posebna verzija nije temeljna):

  • Win7 x86 vm.
  • Win7 X64 VM.
  • Win10 X64 VM.

Započnimo sa X86 arhitekturom, a zatim ćemo port iskoristiti za Win7 X64 sistem. Neki eksploati se neće pokrenuti na strojevima sa Win10 zbog prisutnosti nove zaštite. U ovom slučaju ili mi mijenjamo logiku eksploatalnog rada ili ćemo koristiti potpuno drugačiji pristup.

Korišteni softver:

  • Hypervisor (opcije mase).
  • Windows 7 x86 VM
  • Windows 7 x64 VM
  • Windows 10 x64 vm

Postavljanje sistema za uklanjanje pogrešaka

Ispravljački sustavi za uklanjanje koji ćemo komunicirati namijenjeni su preuzeti ranjivog vozača. Na ovim mašinama se često pojavi kolaps, jer većina iznimka u kernelu doprinosi fenomena ove vrste. Potrebno je naglasiti dovoljno RAM-a za ove sisteme.

Na svakoj mašini koji će se otkazati, morate učiniti sljedeće:

  • Unutar virtualkd direktorija, pokrenite ciljnu \\ vminstall.exe datoteku. Novim će se zapise za pokretanje bit će dodati, a funkcije uklanjanja pogrešaka bit će dostupne i automatska veza s virtualkd serverom instaliranom u sustavu koji djeluje kao pogrešac.

U slučaju Windows 10 VM, morate omogućiti režim ispitivanja za potpisivanje, što vam omogućava preuzmi nepotpisane upravljačke programe u kernel.

Nakon izvršenja BCDeDedit / Podesite testiranje i ponovno pokretanje na radnoj površini, pojavit će se "Test Mode".

Kratak opis HEVD modul

Postupak vozača je početak za svaki pokretač:

NTSTATUS DriverEntry (u pdriver_object DriverObject, u ronicode_string Registrirath) (
Uint32 i \u003d 0;
Pdevice_object deviceobject \u003d null;
NTSTATUS status \u003d status_unsuccessful;
Unicode_string Devicename, dosdevicename \u003d (0);

Nereageren_parametar (servira);
Paged_code ();

Rtlinicinicodestring (& Devicename, L "\\\\ uređaj \\\\ hacksysextremeVuLneraAbledriver");
RtlinitUnicodestring (& DosdeviceName, L "\\\\ dosdevices \\\\ hacksysextremeveLnerablederiver");

// stvoriti uređaj
Status \u003d IoCreateDevice (vozač,
0,
& Naziv uređaja
File_device_unknown,
File_device_secure_open,
Lažan
& DecebObject);

  • Ovaj postupak sadrži pozivanje funkcije IoCreateOdevice koja sadrži ime vozača koji ćemo koristiti tokom komunikacije.
  • Objekt vozača će dodati željene strukture i pokazivače na funkcije.
  • Za nas, pokazivač funkcionalne pozicije povezan s postupkom upravljačkog dezena-\u003e važan je za IOCTL obradu (I / O kontrola; kontrola ulaza / izlaza);
  • U HEVD-u se ova značajka naziva irpdeviceioctlhandler, koji je sjajan uvjetni izraz s mnoštvom podružnica za svaki IOCTL. Svaka ranjivost ima jedinstveni IOCTL.

Primjer: hackys_evd_ioctl_stack_overflow je ioctl koji se koristi za aktiviranje šipki povezanih s prelivom hrpe.

Ovo je prvi dio završava. U sledećem članku ćemo razgovarati o korisnim teretama. Trenutno je dostupno samo blagotvorno opterećenje za krađu tokena, koji će se koristiti u trećem dijelu.

P.S. Razumijem da postoji puno suptilnosti i problema sa kojima možete susresti. Budući da se ovaj ciklus fokusira na razvoj eksploata, morat ćete sami riješiti sve povezane probleme. Međutim, sva pitanja koja možete postaviti u komentarima.

  • Autori:

    Barinov S.S., Shevchenko O.G.

  • Godina:
  • Izvor:

    Informatika i računarska tehnologija / Materijali VI Međunarodne naučne i tehničke konferencije učenika, diplomiranih studenata i mladih naučnika - 23. do 25. novembra 2010., Donjeck, Donntu. - 2010. - 448 str.

napomena

Uporedna analiza uklanjanja pogrešaka korisničkog režima i režim kernela primjenjuje se na operativni sistem Microsoft Windows, razlikuje i probleme organiziranja potonjih pogrešaka. Na osnovu dobivenih rezultata, glavni zahtjevi za izgradnju grešaka Kernel režima u slučaju nužde i interaktivnog uklanjanja pogrešaka. Provedena je analiza postojećih rješenja za poštivanje zahtjeva. Konkretno, posebna se pažnja posvećuje Microsoftovom Windows DeBugger Debugger-u.

Glavni dio

Otklanjanje pogrešaka je proces određivanja i eliminiranja uzroka grešaka u softveru. U nekim projektima uklanjanje pogrešaka traje do 50% ukupnog razvoja. Otklanjanje pogrešaka može se značajno pojednostaviti kada se koristi specijalizirani alati koji se stalno poboljšavaju. Glavni takav alat je uklanjanje pogrešaka, što vam omogućava da kontrolirate implementaciju softvera, gledajte njegov potez i ometajte ga. Alati za uklanjanje pogrešaka kernela pretežno koriste programeri vozača.

Aplikacijski program za razvoj softvera nudi širok spektar karakteristika. Svako integrirano razvojno okruženje uključuje mogućnost uklanjanja pogrešaka bez potrebe za korištenjem alata za treće strane. Ako govorimo o sistemskom softveru i razvijanju vozača posebno, tada se po svojim specifičnostima, razvojni proces izuzetno težak i malo je automatiziran. Sve faze razvoja, uključujući uklanjanje pogrešaka, su odvojene. Da biste izvršili svaki od njih, potrebni su posebni uvjeti: Pisanje programskog koda se vrši na punom fleksibilnom računarskom sistemu, uklanjanja pogrešaka - na sistemu za uklanjanje pogrešaka, testiranje - ovisno o okolnostima itd. Isti debugger kernel režima složeniji je u razvoju i u skladu s tim, manje prijateljskim.

Općenito, možemo razgovarati o nedostatku jarnog pogrešaka. Iako su to sredstva dostupna, često nije potrebno razgovarati o alternativama. Na primjer, Microsoft Windows Debugger Debugger ima previsok prag ulaska. Mnogi programeri govore o prvom negativnom iskustvu kada su se upoznali, a većina njegovih mogućnosti ostaje spaljena.

Na osnovu strukture virtualnog adresnog prostora, ako se u aplikaciji napravi greška, aplikacija će snimiti podatke na arbitravnu memoriju lokaciju, aplikacija će oštetiti samo vlastito memorije i neće utjecati na rad drugih Aplikacije i operativni sistem. Dok je kôd jezgrenog načina moguće oštetiti važne strukture podataka operativnog sistema, što će neminovno dovesti do zajedničkog kvara. Neefikasno pismeni vozač može prouzrokovati i ozbiljnu degradaciju cjelokupnog operativnog sistema.

    Moderni pogrešači pružaju sljedeće osnovne funkcije:
  • uklanjanje pogrešaka na nivou izvornog koda;
  • upravljanje izvršenjem;
  • pogledajte i promijenite memoriju;
  • pogledajte i promijenite sadržaj procesorskih registara;
  • pogledajte snop poziva.

Da bi se olakšalo rad s kodeksama demontaže, takozvani se koriste. Regugging Likovi. Tijekom rada veze, pored slike izvršne datoteke, može se stvoriti i datoteka podataka koja sadrži informacije koje nisu potrebne prilikom izvršavanja programa, ali izuzetno je koristan prilikom uklanjanja pogrešaka: imena funkcija, globalni Varijable, opis konstrukcija. Znakovi za uklanjanje pogrešaka dostupni su za sve izvršne datoteke operativnih sistema Windows.

Pod kontrolom izvršenja znači mogućnost prekida i obnovu izvršenja programa program za postizanje određene naredbe u programskom kodu. Ako se program program izvrši u koraku po korak - dođe do prekida za svaki programski jezik lexeme ili prilikom izlaska na podprogram. Sa besplatnim izvršenjem, prekid izvršenja nastaje u naprednim odjeljcima Kodeksa - mjesta u kojima su instalirane tačke zaustavljanja.

Prilikom prekida koda jezgrenog načina rada, pojavljuje se sljedeća dilema. Debugger za interakciju s programerom koristi korisničko sučelje. Oni. Na minimum je vidljiv dio uklanjanja pogrešaka u korisničkom režimu i prirodno koristi aplikacijsko programiranje sučelja (Windows API), koji zauzvrat počiva na modulima režima kernela. Stoga, suspenzija Core načina kôda može dovesti do međusobnog blokiranja: sustav će prestati reagirati na zahtjeve korisnika.

Da biste pristupili sjećanju kernela, komponente uklanjanja pogrešaka također se moraju izvoditi u režimu kernela. To dovodi do pojave dva problema odjednom, što su očigledna posljedica organizacije sjećanja u načinu zaštićenog procesora.

Prvi problem se odnosi na emisiju virtualnih memorijskih adresa. Vozači stalno komuniciraju s aplikacijama korisnika koji su dodavanjem pristupa njihovoj memoriji. Windows operativni sistem emituje virtualne adrese fizičkog, vođenog konceptom konteksta potoka. Kontekst struje je struktura koja odražava stanje potoka i uključujući, posebno, skup registara i neke druge informacije. Kada se kontrola prenosi na drugi tok, nastaje kontekstni prekidač, u kojim se poštuju informacije o jednom struju i informacije o drugom obnovu. Kada prebacite kontekst stream u tok drugog procesa, direktorij stranice koji se koristi za emitiranje virtualnih adresa na fizičko.

Posebnost je da kada su sistem za otpremanje poziva Windows operativni sistem ne prelazi kontekst. Zbog toga kernel mod kôd može koristiti virtualnu adresu korisničkog režima.

Inače, situacija je kada otpremčene prekide ili izvođene sustav teme. Prekid se može pojaviti u bilo kojem trenutku, pa je nemoguće predvidjeti koji će se kontekst potoka koristiti. Sistemski tokovi ne pripadaju nijednom procesu i ne mogu emitirati virtualnu adresu korisničkog režima. Odavde slijedi da je u tim situacijama nemoguće nazvati sjećanje na korisnički režim.

Drugi problem je žaliti na pokretnu memoriju. Većina informacija u memoriji je premještena, a u bilo kojem trenutku može se premjestiti iz fizičke memorije na tvrdi disk u datoteci stranice. Ako se uputite na stranicu koja je odsutna u fizičkoj memoriji, u normalnoj situaciji, procesor će generirati prekid memorije menadžera memorije, a kao rezultat toga će se stranica čitati iz datoteke stranice i učitati u Fizička memorija.

Opisano ponašanje se krši ako je programsku kodeks za uklanjanje pogrešaka primoran da koristi visok nivo ispitivanja prekida (razina prekida, IRQL). S IRQL-om koji se poklapa sa IRQL memorijskim menadžerom, dama neće moći učitati stranicu koja nedostaje, jer Operativni sistem blokirat će prekid stranice prekida. To će dovesti do kolapsa operativnog sistema.

Otklanjanje pogrešaka prihvaćeno je za interaktivno i hitno. Sa interaktivnim lokalnim uklanjanjem pogrešaka, uklanjanje pogrešaka se izvodi u istom sustavu kao objekt pogrešaka. Sa interaktivnim daljinskim pogrešćim uklanjanjem pogrešaka i objekt za uklanjanje pogrešaka izvodi se u različitim sistemima. Pri uklanjanju pogrešaka kernela, sistem se mora nadgledati, počevši od prvih koraka svog preuzimanja, kada mreža još ne funkcionira, stoga se za komuniciraju jednostavne serijske sučelje, poput COM-a, Firewire, USB. Nedavno, zbog trendova u razvoju virtualizacije softvera na različitim nivoima apstrakcija, virtualne mašine sve više privlače. Gostionica OS-a djeluje kao otpadnik, OS postavljen uključuje korisničko sučelje za uklanjanje pogrešaka.

Stoga, za vanredno uklanjanje pogrešaka, ne morate instalirati alat za uklanjanje pogrešaka na test računar. Raspodjela operativnog sistema Windows uključuje mehanizme za implementaciju vanrednog pogrešaka. Prije ponovnog pokretanja, operativni sistem može sačuvati informacije o svom stanju da programer može analizirati i saznati uzrok. Ove informacije pohranjene u datoteci nazivaju se memorijskom deponom.

Osnovna osnovna mod uklanjanja pogrešaka sredstva pružaju proizvođač operativnog sistema Windows u okviru besplatnih alata za uklanjanje pogrešaka za Windows paket. Alati uključuju grafičke i konzole uređaje WindBG-a i KD (u daljnjem tekstu Windows Debugger). Rad ovih pogrešaka zasnovan je na mehanizmima koje su predviđeni programeri operativnog sistema i položeni u njen kernel.

Glavni režim za Windows Debugger je režim naredbenog tumača. Zbog modularne strukture, zajedno s isporučenim programerima, naredbe za uklanjanje pogrešaka za Windows podržavaju module treće strane koji se nazivaju proširenja. U stvari, većina ugrađenih naredbi su takođe uređena u obliku ekstenzija.

Windows Debugger fokusiran je na daljinsko interaktivno i hitno uklanjanje pogrešaka, kada se koristi sve njegove mogućnosti. Istovremeno, potpuno izložena lokalna interaktivna pogrešaka nije podržana: Debugger omogućava samo gledanje nekih konnelnih konstrukcija.

Postoji produžni modul za Windows Debugger nazvan Livekd, kreirao Mark Russinianovich, koji u nekom smislu provodi lokalno interaktivno uklanjanje pogrešaka. Livekd u pokretu stvara deponiju memorije radnog sistema i koristi ga za uklanjanje pogrešaka.

Alati "Alati za uklanjanje pogrešaka za Windows" redovno se ažuriraju i podržava sve moderne Windows operativne sisteme.

SoftIce kernel debugger, proizveden od strane Compuwarea u softverskom paketu DriverStudio, tradicionalno je izvršio alternativu "Alati za uklanjanje pogrešaka za Windows". Razlikovna karakteristika SofIce bila je implementacija lokalnih interaktivnih pogrešaka na podržanom hardveru. Debugger bi gotovo u potpunosti mogao kontrolirati rad operativnog sistema.

Od 3. aprila 2006. prodaja porodičnih proizvoda Driversludio obustavljena je zbog "mnogih tehničkih i poslovnih problema, kao i općeg statusa tržišta". Posljednja verzija operativnog sistema, čija je podrška implementirana je li servisni paket Windows XP 2. Usluga ne mijenjaju interfejs aplikacije operativnog sistema, ali broj brojeva sustava i drugih nedokumentiranih informacija mogu podvrgnuti a Promjena. SoftIce uklanjanje pogrešaka oslanjao se na čvrsto propisane adrese unutarnjih struktura podataka. Kao posljedica - uz održavanje servisnog paketa 3 kompatibilnost je prekinuta. Očigledno da se više kasnije ne podržavaju i kasnije verzije operativnog sistema Windows.

Syser Kernel Debugger kreirao je mala kineska kompanija SyserSersoft kao zamjena softverskog pogrešaka. Prva konačna verzija objavljena je 2007. godine. Like SofIce, Syser Kernel Debugger u stanju je da izvrši interaktivno uklanjanje pogrešaka na operativnom sistemu. Podržani su samo 32-bitna izdanja modernih verzija prozora.

Trenutno je Windows Debugger glavni alat među programerima zrnatih modula. Takođe koristi Windows operativni razvojni tim za razvojnog sistema.

Debugger - drugi nakon prevodilaca potrebno je kreirati programe. Međutim, mnogi od onih koji pišu računarske programe i koriste uklanjanje pogrešaka, ne znaju koji su principi i mehanizmi njegovog rada.


Teško je biti pogrešac ...

U svjetlu činjenice da programeri koriste debugger večeru i nosno, posebno kada uđu u režim dubokog pogrešaka, vrijedi reži da ako debugger nije program, već bi se zatekao i odrobljen, zasigurno bi se zasigurno pregrijao i slomljen . Jer toliko djela, koliko nestaje iz uklanjanja pogrešaka, nema čak ni kompajler.

Naravno, od sada su mnogi od svih različitih programskih jezika, zatim debugeri za svakog od njih. I, naravno, za različite kategorije ovih jezika postoje razlike u radu pogrešaka: na primjer, pogrešač programa na interpretacijskom rubini radit će drugačije nego za Java jezik sastavljen u bajt kodu, i uklanjanje pogrešaka Za Java će se zauzvrat imati razlike od uklanjanja pogrešaka Visual C ++.

Razgovarat ću o uklanjanju pogrešaka za Windows platformu. Ostvarujući principe rada pogrešaka za nju, bit će moguće nositi se s pogrešačima u skladu s Posix sistemom, a s pogrešačima koji ne rade na nivou operativnog sistema, već na nivou virtualne mašine ili bilo kojeg prevodioca .


Debugeri za prozore: dvije vrste

Postoje dvije osnovne različite vrste pogrešaka pod Windowsom. Mislim da je sve bilo suočeno sa svime kada se programira na Delphiju (nije programirano na njemu? Teško je vjerovati. Šta ste programirani u školi i u mlađim kursevima?). Ovo su pogreške prilagođene aplikacije. Oni su dosta i postoje pojedinačno i (posebno, usput, često) kao dio integriranog okruženja za razvoj aplikacija. Među uklanjanjem pogrešaka distribuiranih kao zasebni softverski proizvodi tradicionalno raspoređuju Ollydbg, a jednom sam pisao o tome u "računaru Westi".

Druga vrsta pogrešaka je osnovna pogrešačica operativnog sistema. Sastaju se i koriste se rjeđi i njihovim se uređajem značajno razlikuju od korisničkih aplikacija za uklanjanje pogrešaka. Najpoznatiji, a istovremeno je najbolji osnovni ispravci SoftIce. Možda nisi čuo samo za njega, već se čak i koristio.

Budući da rad svake od dvije vrste pogrešaka ima svoje specifičnosti, tada ću vam reći o svakom od njih.


Aplikacije za uklanjanje pogrešačkih korisnika

Ispravljanje prilagođenih aplikacija je jednostavniji jer crni i prljavi rad preuzima operativni sistem. Windows ima posebna softverska sučelja koja su dizajnirana za uklanjanje pogrešaka u korisničkim aplikacijama - nazivaju se Windows uklanjanjem API-ja. Isključivanje API-ja koji koriste svi uklanjanje pogrešaka koji su ugrađeni u popularni integrirani razvojni okruženja za Windows.

Da bi za pokretanje pogrešaka za uklanjanje pogrešaka mora posebno započeti pogrešak proces - tako da sistem zna da će ovaj proces biti pod uklanjanjem pogrešaka. Nakon toga započinje ciklus pogrešaka: Program se izvršava prije početka određenog događaja, koji se naziva - debug događaj ili debug događaj. U ovom slučaju, ciklus pogrešaka pokreće se u zasebnom toku kako bi se spriječilo uklanjanje pogrešaka.

Ali ovo je samo početak. Jer najzanimljivija stvar u radu uklanjanja pogrešaka počinje kada se dogodilo debugbiranje. Na kraju krajeva, u stvari, koji je posao pogrešaka? Da bi se pomoglo programeru lokalizira grešku s preciznošću određene funkcije, specifičan rad, specifičnu varijablu. U ovom tvrdom slučaju, debugger može pomoći i operativnom sistemu.

Dakle, dogodilo se događaj za uklanjanje pogrešaka, a onda je potrebno nekako saznati kako se odnosi na tekst programa. To je moguće samo ako su u samom programu omogućene posebne informacije o pogrešačima - jezičak uklanjanja znakova za uklanjanje pogrešaka. Sadrži informacije o usklađenosti između adresa i karakteristika karakteristika, tipova podataka, broja redaka kodova. Zahvaljujući im se da je uklanjanje pogrešaka iz kojeg je svaki Windows programer poznat. Tablice simbola imaju različite formate, pa stoga nije uvijek moguće ispraviti program koji je sastavio prevodilac jednog programera koji koristi uklanjanje pogrešaka od drugog proizvođača. Ali, međutim, najčešći format može se i dalje specificirati - ovo je PDB (programska baza podataka), a dizajnirana je, naravno, Microsoft Corporation.

Dakle, ako tablica pogrešaka znakova ima PDB format, možete koristiti poseban alat iz Microsoft Corporation - simbolički procesor za uklanjanje pogrešaka. Jednom je ušao u jezgru sistema i nazvan je imagehlp.dll, ali davno je istaknuo u zasebnoj biblioteci. Procesor simbola omogućava vam da pronađete na datu adresu na najbližu otvorenu funkciju ili globalnu varijablu, kao i broj niza i naziva izvorne tekstualne datoteke u kojoj se nalazi ova linija. Obrnuto operacije su podržane, na primjer, pretražujući adresu adrese po njegovo ime.

To, naravno, nije sav posao koji se uklanja pogrešac u prilagođenim aplikacijama. Na primjer, prilikom uklanjanja pogrešaka s više navoja, pojavljuju se mnogi vrlo suptilni trenuci povezani sa interakcijom tokova. Čak i kada se uklanjate tako relativno jednostavne stvari, poput usluga, postoje nijanse.

Ali na nijansu nećemo se zaustaviti na kraju - na kraju članka, reći ću vam gdje pročitati o njima. Sada pogledajmo kernel debuggere.


Nuklearni debugger

Core Debugders - Programi su mnogo komplikovaniji od pogrešaka za korisničke aplikacije, a pretpostavljam da je sasvim jasno zašto: nemaju pomagača u obliku operativnog sistema. U ovom je slučaju, to je njihov klijent, jer je to u konačnici, trebao bi se odabrati.

Većina kernel pogrešaka zahtijeva dva računara povezana s njihovim radom, povezanim sa kabelom Zero-modem. Zero-modem je način da se dva računara povezuje direktno kabl putem svojih COM ili LTP portova. Drugi računar potreban je, jer je dio pogrešaka koji sjedi na prvom (na kojem je instaliran dug duga), ima ograničen pristup hardveru, pa je stoga cijeli izlaz podataka nula.

U modernim procesorima arhitekture Intel X86 postoje posebni registri za uklanjanje pogrešaka (i u starom 368., a u novijim modelima procesora od njih samo osam, nazivaju se DR0-DR7). Ovi registri omogućavaju uklanjanje pogrešaka da postavi kontrolne punktove za čitanje i snimanje memorije, kao i na I / O portovima. Općenito, sve izgleda ovako, a ne mislim da je detaljno vrijedno pisati detaljno, za koji je odgovoran za uklanjanje pogrešaka, koji se prekida implementira prekidačem i daju druge slične informacije. Bolje je reći o specifičnim postojećim knjigama kernela za Windows.

Pa, prvo, ovo je uklanjanje pogrešaka u ugrađenom u kernel operativnog sistema. To je u svim OS NT ravnalom, počevši od Windows 2000. Ovo je dio datoteke NTOSKRNL.exe, a možete ga omogućiti postavljanjem opcije "/ Debug" za operativni sistem u programu za pokretanje. Ovaj debugger treba povezivanje nula-modema i drugi računar sa istim OS-om.

Postoji još jedan kernel pogrešačić iz Microsofta - WindBg. Strogo govoreći, ovo nije kernel debugger, već hibridni pogrešač koji se može koristiti i za uklanjanje pogrešaka na osnovu korisničke razine. On, za razliku od uklanjanja pogrešaka u jezgru, ima grafičku školjku i zato je lakše koristiti. Ovaj debugger podržava i posebna proširenja koja mogu biti korisne prilikom rješavanja nekih zadataka pogrešaka. Ali zahtijeva i dva računara za uklanjanje pogrešaka kernela.

Međutim, postoji kernel debugger koji se može uklanjati pogrešanjem na jednom računaru. Ovo je Softice. Istovremeno, SofIce se mogu ispraviti i aplikativni programi. Korištenje ovog uklanjanja pogrešaka za korisnike je opravdan, na primjer, u slučaju uklanjanja pogrešaka sistema u stvarnom vremenu vezanim za tajmer sistema. Ako popravite uklanjanje pogrešaka pomoću običnog pogrešaka, rezultat može biti netačan čak i ako program pravilno radi, a Softice će zaustaviti program i tajmer. Ovo je korisno prilikom uklanjanja pogrešaka s više navoja. Sve vrijeme, SofIce ima vrlo, vrlo dobro razvijeno sredstvo za izlazne informacije o svim tokovima u sistemu, o sinkronizaciji potoka za višeslojne aplikacije, informacije o ručici "... jedini minus ovog pogrešaka Da li je njegova složenost za aplikacijski programer. Ali iz osnovnih pogrešaka ovo je najlakše i najefikasnije.


Za najzadravnije

Sada, naravno, razgovor o uklanjanju pogrešaka za Windows aplikacije nije tako relevantan kao prije deset godina. Cijeli svijet je postao zainteresiran za Internet, a glavni korisnici SofIce postali su dolinu, neumorni radnici na pirateriji Niva. Ipak, nije tako loše. Komunikacija sa SofICe "om, nesumnjivo razvija osobu u pogledu znanja o računaru, iako, naravno, ako komunicirate samo s pogrežnikom i ne komunicirajući sa živim ljudima, mogu li neke nuspojave. Pa, o tome, mislim Svi nagađaju.

Debugeri su jedno od najosebujnije vrste softvera, ali u smislu razvoja, čak su i pogrebnici na nivou korisnika prilično složeni. Ali, ipak, ako imate želju i vrijeme da biste razvili vlastiti pogrešačić, vaše znanje iz oblasti operativnih sistema i programiranja značajno će se povećati i stoga će se povećati šanse visoko plaćenih radova.

Dakle, ako želite stvoriti vlastiti pogrežni program, prvo biste trebali biti upoznati sa materijalima na ovoj temi. Po mom mišljenju, najbolji dodatak za početak bit će knjiga Johna Robbinasa "Otklanjanje Windows aplikacija". Ona je već stara, 2001. izdanje, ali informacije su navedene u njemu relevantne su i sada, jer ima zajedničku, čak i na neki način temeljna priroda. U ovoj knjizi postoje primjeri pisanja pogrešaka za Windows, pored toga, bit će vam korisno ako programirate na C ++ i želite bolje shvatiti obradu izuzetaka. Zapravo, iz ove knjige sam saznao za uklanjanje pogrešaka iz članka. Ako nađete da ova knjiga neće raditi (na kraju krajeva, već je prilično stara), postoji nekoliko adresa koje možete pristupiti. Prvi je ovo: www.xakep.ru/post/19158/default.asp. Ovaj članak iz časopisa "Hacker" govori više detalja o klencem gnugama nego što sam učinio, a osim toga, sadrži šifru najjednostavnijeg pogrešaka. I na Kalashnikoff.ru/Assembler/issues/016.htm, možete naučiti kako napisati DOS pogrežnicu. Ali, naravno, najbolje je čitati MSDN i istovremeno pronaći neki pogregivac sa otvorenim tekstovima koji se bave njima. Pa, naravno, ako ste došli na pisanje pogrešaka, onda vam je uspjeh u ovoj teškoj materiji!

Da biste odredili kernel, morate se povezati s računarom pomoću nulte-modemskog kabla ili modemne veze. Debug računar bit će nazit će "host", a naziv "cilj" dobit će problem.

Oba računara trebaju raditi na pokretanju iste verzije prozora, a datoteke znakova za ciljni računar moraju se instalirati na host računalo. Simbolične datoteke nalaze se na Windows InstalT CD-u u direktoriju Debug \\ Debug.

Da biste omogućili uklanjanje pogrešaka, morate izvršiti promjene u datoteci Boot.ini na ciljnom računalu.

1. Promijenite atribute datoteke Boot.ini:

attrib C: \\ boot.ini - R - S

2. Uredite ovu datoteku i u Windows pokretački niz, dodajte parametar / Debug (kako biste osigurali sistem za preuzimanje operativne memorije KERNEL Debugger prilikom dizanja Windows-a). Dodatni parametri su / pogrešni depugu, koji izvještava o sistemu koji se mora koristiti COM (zadani COM2) i / Baudrate - da odredite brzinu prijenosa podataka (zadana brzina od 19200 baud, ali je bolje koristiti 9600). Na primjer:


Multi (0) disk (0) RDISK (0) Particija (0) \\ windows \u003d "Windows NT" / pogrešak / depugport \u003d COM2 / Baudrate \u003d 9600

3. Spremite datoteku.

4. Instalirajte prethodni atributi datoteke za Boot.ini:

attrib C: \\ boot.ini + r + s

U ovom primjeru, ciljni računar omogućio je vezu kroz COM2 port brzinom od 9600 bita / s.

Host računar mora biti konfiguriran pomoću parametara potrebnih za uklanjanje pogrešaka. Pored toga, moraju se instalirati simboličke datoteke. Da biste ih instalirali, idite na \\ podršku \\ Debug Directory na instalacijskom CD-u i unesite sljedeću naredbu:

expldsym : <целевой диск и каталог>

Na primjer:

expndsym F: D: \\ Simboli

Instalacija može potrajati neko vrijeme. Zapamtite da ako su ažurirani paketi instalirani na ciljnom računalu, ove pakete datoteke znakova također bi trebale biti instalirane i na računaru domaćina. Simbolične datoteke za pakete ažuriranja mogu se preuzeti sa Microsoftove web lokacije.

Sljedeća bi faza konfiguriranje varijabli okoliša potrebne za uklanjanje pogrešaka, na primjer, varijable koje ukazuju na lokaciju simboličkih datoteka itd. Slijedi opis ovih varijabli.

Opis sistemskih varijabli

Definicija ovih varijabli može se staviti u naredbenu datoteku kako ne bi se izbjeglo unošenje odgovarajućih naredbi sa svakim preuzetom:

odjeknuti
SET _NT_DEBUG_PORT \u003d COM2
Set _nt_debug_baud_rate \u003d 9600
Set _nt_symbol_path \u003d D: \\ simboli \\ i386
Set _nt_log_file_open \u003d D: \\ debug \\ logs \\ debug.log

Sada morate kopirati Core Debug softver koji se nalazi u direktoriju podrške \\ Debug \\<процессор> Na instalacijskom CD-u (podrška \\ Debug \\ I386). Najlakši način za kopiranje cijelog direktorija je u potpunosti, jer ima malu veličinu (oko 2,5 MB). Za platformu I386 koristi se pogrešač koji se isporučuje kao datoteka i386kd.exe. Debugger počinje koristiti naredbu I386KD. Da biste unijeli naredbu, kliknite kombinaciju tipki I pričekajte dok se ne pojavi pozivnica KD\u003e naredbenog retka.

Podijeliti