Kaip veikia derinimo priemonė. Branduolio režimo derinimo įrankiai, skirti Windows operacinei sistemai Kas yra branduolio derinimas

Padorių branduolio lygio derintuvų, skirtų „Windows“, yra nedaug, tačiau „Linux“ juos galima suskaičiuoti ant vienos rankos pirštų, o net ir tie dažniausiai yra neapdoroti, nebaigti arba apleisti ir apaugę samanomis... Šiandien kalbėsime apie populiariausius ir įdomiausia iš jų -
Linice.

Įvadas

Kaip jau spėjote iš pavadinimo, Linice yra neoficialus legendinio „uostas“.
SoftICE, skirta Linux, kuriame buvo išsaugota sąsaja, komandų sistema ir dauguma pastarosios galimybių: iššokantis langas naudojant karštąjį klavišą (in Linice Tai ); aparatinės įrangos pertraukos taškų nustatymas visoms funkcijoms ir sistemos iškvietimams; GDT/LDT/IDT, fizinės atminties puslapių peržiūra; funkcijos, pasiskolintos iš GDB (savavališkos funkcijos iškvietimas su komanda CALL, registro konteksto išsaugojimas/atkūrimas, vidiniai kintamieji ir kt.).

Skirtingai nuo daugumos kitų derintuvų, kurie veikia per ptrace mechanizmą, kuris nepasikartoja ir lengvai aptinkamas apsaugos priemonėmis (kurios Windows analogas yra DEBUG_PROCESS, naudojamas programų derintojų), Linice naudoja vietinį sekimą, tą patį kaip ir SoftICE, kuris leidžia abiem derintojams derinti labai apsaugotas programas, kurių kiti negali valdyti.

Tiesą sakant, tai visai ne prievadas (taigi ir citatos), o nepriklausomas projektas, parašytas nuo nulio ir nemokamai platinamas šaltinio kodu (iš SoftICE yra tik įkvėpimas). Pagrindinę kodo dalį, skirtą 2.4 branduoliui, parašė vokiečių įsilaužėlis Goranas Devicas, tačiau 2.6 branduolio priežiūra užsiėmė visiškai kiti žmonės: Danielis Reznickas, Peteris K. ir Carlosas Manuelis Duclosas Vergara. O mūsų tautietis Olegas Khudakovas perrašė surinkėjo failus iš nasm į
gcc.

Šaltiniai tekstai yra oficialioje projekto svetainėje -
Linija%0A.com">www.Linice.com, taip pat yra dokumentacija, trumpi DUK ir nuoroda į forumą
Linija%0A">groups.google.com/group/Linice. Nėra paruoštų dvejetainių rinkinių.
Projekto kūrėjai atidarė savo paskyrą „SourceForge“, tačiau buvo per daug tingūs, kad į ją įkeltų failus, pateikdami tik 3 labai žemos kokybės ekrano kopijas:
.

Sistemos reikalavimai

Naujausia versija Linice yra numeruotas 2.6 ir datuojamas 2005 m. liepos 28 d., visiškai palaiko 2.4.x branduolį ir VGA konsolės režimą. Yra rimtų problemų su naujesniais branduoliais, o 2.6.x branduolio palaikymas yra ribotas.
Debugger buvo sukurtas ir išbandytas naudojant Debian 2.6. Jo suderinamumas su kitais platinimais negarantuojamas, o tai verčia mus griebtis tamburino, tačiau kai kuriais atvejais net ir tamburinas nepadeda. Tiesą sakant, laikykite Debian savo kompiuteryje, kad galėtumėte dirbti Linice, - tai visai normalu. Seniai, kai dar nebuvo SoftICE diegimo NT, daugelis įsilaužėlių įdiegė Win 9x vien tam, kad sulaužytų programas, nors patys sėdėjo po
N.T. Todėl, kad apimtų visas įrengimo subtilybes Linice vieno straipsnio rėmuose tai praktiškai neįmanoma, apsiribosiu kompiliavimo ir paleidimo proceso aprašymu Linice pagal vieną konkrečią paskirstymą - Knoppix 3.7 su branduoliu 2.4.1 konsolės VGA režimu.
Linice palaiko ACPI ir kelių procesorių mašinas, bet neveikia gerai su X, ypač kitose nei nVidia vaizdo plokštėse. Jis visiškai nesuvokia 24 bitų spalvų gylio, „suvirškina“ tik 8, 16 ir 32 bitus, todėl yra patogiau. derinti X programas per nuotolinį terminalą, prijungtą per COM prievadą naudojant VT100 protokolą. Šiuo atveju su juo veiks ir vietinė klaviatūra.
Linice!

„Linice“ kompiliavimas ir konfigūravimas

Atsisiųskite šaltinio tekstų gzip archyvą www. Linice.devic.us/ Linice-2.6.tar.gz, kuris užima šiek tiek mažiau nei megabaitą, išpakuokite jį į diską, eikite į ./docs katalogą ir iš readme failo sužinome, kad derintuvas sukurtas 2.4 branduoliui taip:

# kompaktinio disko versija
# ./make_bin-2.4
# CD ../bin
# padaryti švarų; mak e

Tačiau prieš paleisdami make, turite atidaryti failą ./bin-2.4/Makefile ir redaguoti eilutę „TARGET“ pagal tikslinės platformos konfigūraciją ir architektūrą. Visų pirma, ACPI įrenginiuose su kelių branduolių arba „HyperThreading“ procesoriais tai atrodys taip:

TARGETAS = -DSMP -DIO_APIC

Kai kompiliavimas bus baigtas, ./bin kataloge bus daug failų ir katalogų, tačiau vieninteliai svarbūs yra šie:

linsym – derintuvo įkėlimo modulis;
linince.dat – konfigūracijos failas;
xice – X" palaikymas, dirbant tekstiniu režimu galima ištrinti;
./Linice_2.4.27/Linice.o – įkeliamas branduolio modulis su pačiu derintuvu.

Sukūrimo procesas Linice

Surinkus minimaliai veikiantį rinkinį, būtų puiku gauti visa kita – demonstracinius derinimo pavyzdžius, esančius ./test kataloge ir sukompiliuotus su kompiliavimo scenarijumi, taip pat plėtinio modulį (mūsų nuomone, papildinį), esantį aplanke. ./ext katalogas, sudarytas komanda make ir įkeltas komanda insmod. Iš to jokios naudos nėra, bet išstudijavę šaltinio kodą galime rašyti savo modulius, kurie praplečia funkcionalumą
Linice.

Įkeliant Knoppix, apatinėje ekrano eilutėje pasirodo raginimas „boot:“, kuriame turite įvesti „knoppix 2 vga=normal“. galima praleisti), „2“ blokuoja X įkėlimą, o „vga=normal“ nustato standartinį vga režimą, kurio skiriamoji geba yra 80x25.

Palaukę, kol atsisiuntimas bus baigtas, sakome „su“, tada „passwd“ ir įvedame naują „root“ slaptažodį, pagal kurį iškart prisijungiame prie sistemos naudodami prisijungimo komandą. Jei to nepadarysite, pabandykite pradėti Linice baigsis triuškinančia nesėkme su šauksmu „segmentacijos klaida“.

Kai paleidžiate Knoppix iš standžiojo disko (kuriame galite jį įdiegti naudodami komandą „sudo knoppix-installer“, įvestą terminalo lange iš LiveCD seanso), pasirodys pradžios meniu su galimų branduolių sąrašu (2.4)-1 ir spustelėkite Norėdami nustatyti įkrovos parametrus - „2 vga=normal“. Nereikia rašyti žodžio „knoppix“, nes branduolys jau pasirinktas. Kai atsisiuntimas bus baigtas, duokite prisijungimo komandą ir prisijunkite kaip root (darant prielaidą, kad paskyra buvo sukurta anksčiau).

Derintuvas paleidžiamas komanda ./linsym –i, po kurios ji iškart pasirodo ekrane. Jei taip neatsitiks, pabandykite nurodyti jungiklį „--verbose 3“, kad būtų rodomi diagnostikos pranešimai.
Viena iš įkrovos gedimo priežasčių gali būti /boot/System.map failo, kuriame būtų branduolio funkcijų adresai, nebuvimas. Atsisiuntimas taip pat nepavyks, jei System.map turinys nesutampa su dabartiniu branduoliu, o tai gali atsitikti, pavyzdžiui, kai jis perkompiliuojamas. Kai kurie platinimo kompiliatoriai arba iš viso neįtraukia System.map (manydami, kad tai sustiprins sistemos saugumą, nes rootkitams bus sunkiau perimti syscall), arba čia įdeda kažką visiškai ne taip ir apskritai neaišku, kur tai atėjo iš. Tokiais atvejais pakanka tiesiog perkompiliuoti branduolį, nurodant derintuvą į kelią į failą System.map, naudojant jungiklį "-m", jei jis yra kur nors kitur nei /boot. Tokiu būdu saugumas nebus pažeistas ir Linice gali dirbti!
Derintuvas grįžta į sistemą iki arba naudodami komandą „x “ Derinys iškviečia debugerį iš bet kurios programos. Tačiau visai ne faktas, kad atsidursime jos kontekste, nes Linux yra daugiafunkcinė sistema, kuri perjungia procesus vieną po kito, o ADDR (konteksto perjungimo) komandos yra „žodyne“. Linice vis dar neegzistuoja, o kada jis pasirodys, nežinoma. Todėl jūs turite būti gudrūs nustatydami lūžio taškus konkrečios programos naudojamuose sistemos iškvietimuose arba įsilauždami į procesą naudodami INT 03h metodą, apie kurį dabar ir kalbėsime.

„-x“ jungiklis, perduodamas tam pačiam linsym, yra atsakingas už derinimo priemonės iškrovimą (jei tikrai norite jį iškrauti).

Darbo su Linice

Jau dirbusiems su SoftICE, įvaldymas Linice nesukels jokių problemų. Čia naudojamos tos pačios komandos: D – atminties išmetimas, E – atminties redagavimas, T – sekimas žingsnis po žingsnio, P – sekimas neįvedant funkcijų, R – registrų peržiūra/keitimas, BPM/BPX – atminties prieigos taško nustatymas. /vykdymas ir kt. Visas komandų sąrašas yra tiek integruotame žinyne, kuris iškviečiamas per HELP (beje, „HELP komandos_pavadinimas“ suteikia papildomos informacijos apie komandą), ir standartinėje dokumentacijoje.

Paspauskite ir peržiūrėkite PROC komandos rodomą procesų sąrašą, o dabartinis procesas paryškintas mėlyna spalva:

:PROC

1 0000 C1C3E000 MIEGO 0 0 init
2 0000 F7EE8000 MIEGO 0 0 keventd
3 0000 F7EE2000 SLEEPING 0 0 ksoftirqd_CPU0
4 0000 F7EE0000 MIEGO 0 0 ksoftirqd_CPU1
5 0000 F7ED0000 MIEGO 0 0 kswapd
6 0000 F7EAA000 MIEGO 0 0 bdflush
7 0000 F7EA8000 MIEGO 0 0 kupd
56 0000 F6A36000 SLEEPING 0 0 kjournald
1006 0000 F7A34000 VEIKIMAS 0 0 automount
1013 0000 F68E6000 MIEGO 0 0 puodelių
...
1105 0000 F6DDE000 MIEGO 0 0 mc
1106 0000 F6DD4000 MIEGO 0 0 cons.saver

Žinoma, procesai yra geri, bet kaip vis tiek derinti programas? Paprasčiausia į įvesties tašką įterpti CCh mašinos nurodymą, atitinkantį INT 03h nurodymą, prieš tai užsirašius pradinio baito turinį. Tai galima padaryti naudojant bet kurį šešioliktainį redaktorių, pavyzdžiui, tą, kurį ne kartą minėjau
HTE.

Įkėlę failą į redaktorių spustelėkite (režimas), pasirinkite elfą/vaizdą, perkelkite žymeklį į „įėjimo taškas:“, paspauskite (redaguoti) ir pakeiskite pirmąjį baitą į CCh, išsaugokite pakeitimus iki (išsaugoti) ir išeiti. Vykdant pataisytą programą Linice iškart pasirodo, sutrikdyta CCh sugeneruotos išimties, po kurios EIP nurodo pabaigą
CCh.

Programos būsena su pataisytu įėjimo tašku tuo metu, kai pasirodo derinimo priemonė

0023:080482C0 CC tarpt. 3
0023:080482C1 ED in eax, dx
0023:080482C2 5E pop esi
0023:080482C3 89E1 mov ecx, ypač

Žymeklis nurodo in eax,dx (EDh) instrukciją, kuri yra pataisytos xor ebp,ebp (31h EDh) instrukcijos fragmentas. Dabar (teoriškai) turėtume atkurti pradinį baitą, pakeisdami CCh į 31h, sumažinti EIP registrą vienu ir tęsti sekimą kaip įprasta.

Bet taip nebuvo! Linice- tai, žinoma, yra prievadas, bet tik labai grubus, ir jis negali pakeisti puslapio vaizdo atminties, net jei pirmiausia atidarote kodo segmentą rašymui. Neveikia nei E (redaguoti), nei F (užpildyti), nei M (atminties kopija)! Tačiau rašymas į steką veikia, ir mums, įsilaužėliams, to visiškai pakanka.

Prisimename esamą EIP registro reikšmę; nukopijuokite pataisytos mašinos komandą į krūvos viršų; atkurti CCh baitą; jai perduodame valdymą, keisdami EIP reikšmę; atliekame atlikdami vieną sekimo veiksmą; ir grąžinkite EIP į savo vietą, ty į šią mašinos komandą:

Atkuriamas pradinis baitas, pakeistas INT 03h instrukcija

; Pažiūrėkime, kas yra ant krūvos (iš smalsumo).
:d esp-10
0018:BFFFEFC0 C0 82 04 08 00 00 00 00 5D 0C 00 40 DC EF FF BF

; Pataisytos mašinos komandą nukopijuojame į krūvos viršų.
; Skaičius 10h yra didžiausias galimas mašinos instrukcijos dydis x86.
:m eip-1 L 10 esp-10

; Pažiūrėkime, kaip pasikeitė krūva.
:d esp-10
0018:BFFFEFC0 CC ED 5E 89 E1 83 E4 F0 50 54 52 68 F0 85 04 08

; Taip! Stackas tikrai pasikeitė, laikas taisyti CCh 31h.
:e esp-10 31
Redaguoti dar neįdiegtus tiesioginius duomenis.

; Oi! Tiesioginis duomenų priskyrimas „Linice“ neįdiegtas,
; bet mes galime redaguoti iškeltą interaktyviai (taip pat
; kaip SoftICE) arba duokite komandą F esp-10 L 1 31, tiesiog atminkite, kad
; kad, skirtingai nei SoftICE, „Linice“ derintuvas neatnaujina iškelties lango,
; todėl įvykdžius F komandą gali pasirodyti, kad
; nėra rezultatų; Tiesą sakant, taip nėra, tiesiog reikia atnaujinti
; išmeskite su komanda D esp-10, ir viskas atsistos į savo vietas.

; Mes perduodame valdymą komandai, nukopijuotai į krūvą,
; prisiminti EIP registro reikšmę.
:r eip (esp-10)
reg:eip=BFFFEFC0

; Atliekame vieną sekimo veiksmą.
:t
0023:BFFFEFC2 5E pop esi

; Kaip matome, EIP registras padidėjo 2 (BFFFEFC2h - BFFFEFC0h) = 02h,
; todėl kitos komandos adresas yra: 080482C1h - 01h + 02h = 080482C2h,
; kur 080482C1h yra pradinė EIP reikšmė įeinant į programą, o 01h yra INT dydis 03h.

; Mes nustatome EIP į komandą pagal pataisytą instrukciją.
:r eip 80482C2
reg:eip=80482C2

Tai yra šokiai su tamburinu, kuriuos turite atlikti. Ir ką daryti? Taigi, mes sutvarkėme programų įkėlimą į derinimo priemonę.

Komanda exp išspausdina branduolio eksportuotus pavadinimus, kurių bet kuris gali būti išraiškose, pavyzdžiui, "bpx do_bkr" yra lygiavertis "bpx C012C9E8".

Rodomi branduolio eksportuoti pavadinimai

:exp
branduolys
C0320364 mmu_cr4_features
C02AC3A4 acpi_disabled
C02AC8A0 i8253_lock
...
C012BDA8 do_mmap_pgoff
C012C764 do_munmap
C012C9E8 do_brk
C011E990 išėjimo_mm
C011E69C išėjimo_failai

Sisteminiai skambučiai yra sunkesni. Tiesioginė parama iš Linice jo čia nėra (bet taip ir turi būti, atsižvelgiant į Linux specifiką), todėl šį dalyką reikia daryti rankomis.

Syscall lentelė, kaip žinote, yra dvigubų žodžių masyvas, prasidedantis adresu sys_call_table (šį kintamąjį eksportuoja branduolys).

Sistemos skambučių lentelė

; Debugerį perjungiame į dvigubo žodžio rodymo režimą.
:dd

; Lentelę rodome ekrane.
:d sys_call_table
0018:C02AB6A8 C0126ACC F8932650 F89326A0 C013DC10
0018:C02AB6B8 C013DD18 C013D5C8 C013D724 C011F3BC
0018:C02AB6C8 C013D664 C014A8E0 C014A3B4 F893020C

Kiekvienas lentelės elementas atitinka savo sistemos iškvietimą, o kiekvienas iškvietimas turi savo numerį, kurį galima rasti pažiūrėjus į failą /usr/include/sys/syscall.h, bet geriau tai daryti ne Linux sistemoje. , kur nėra tiesioginių numerių, bet pasiskolinti vieną tą patį failą iš BSD – vis tiek, pagrindinių sistemos skambučių numeriai visose sistemose yra vienodi. Visų pirma, atviros sistemos skambutis yra numeris 5.

Norėdami nustatyti lūžio tašką atvirai, turite sužinoti jo adresą, esantį penktame dvigubame sistemos skambučių lentelės žodyje, skaičiuojant nuo nulio ir lygų (šiuo atveju) C013D5C8h.

Atviros sistemos skambučio pertraukos taško nustatymas

; Nustatykite atviros sistemos skambučio pertraukos tašką,
:bpx C013D5C8
; išeiti iš derinimo programos,
:x
...
# atidaryti failą,
...
; iš karto pasirodo derinimo priemonė, pranešdama mums apie tai,
:Lūžio taškas dėl BPX 01

; Išduodame komandą proc, kad įsitikintume, jog esame įtraukti į procesą.
:proс
PID TSS užduoties būsenos uid gid pavadinimas
1049 0000 F6364000 MIEGO 0 0 getty
1145 0000 F61CC000 MIEGO 0 0 mc
1146 0000 F614A000 MIEGO 0 0 cons.saver

Tokiu būdu lengva įsilaužti į jau veikiančius procesus, nustatyti jų naudojamų sistemos skambučių lūžio taškus ir atlikti daugybę kitų įsilaužimui svarbių dalykų.

Išvada

Nepaisant akivaizdžios drėgmės, Linice yra gana tinkamas saugomų programų derinimui, nors gana dažnai tenka griebtis sprendimų, kurie įprastuose derintuvuose vykdomi automatiškai. Štai kodėl Linice gdb visai nepakeičia, o tik papildo.

Terminas „branduolio derinimas“ reiškia branduolio vidinės duomenų struktūros tyrimą ir (arba) nuoseklų branduolio funkcijų sekimą. Šis derinimas yra labai naudingas būdas ištirti vidinį „Windows“ veikimą, nes jis leidžia rodyti vidinę sistemos informaciją, kurios negalima naudoti jokiomis kitomis priemonėmis, ir suteikia aiškų vaizdą apie kodo eigą branduolyje.

Prieš nagrinėdami įvairius branduolio derinimo būdus, panagrinėkime failų, kurių jums reikės norint atlikti bet kokį derinimą, rinkinį.

Branduolio derinimo simboliai

Simbolių failuose yra funkcijų ir kintamųjų pavadinimai, taip pat duomenų struktūrų išdėstymas ir formatas. Juos generuoja susiejimo programa, o derintojai juos naudoja, kad nurodytų šiuos pavadinimus ir rodytų juos derinimo seanso metu. Ši informacija paprastai nėra saugoma dvejetainiame kode, nes jos nereikia, kai kodas vykdomas. Tai reiškia, kad be jo dvejetainis kodas tampa mažesnis ir veikia greičiau. Tačiau tai taip pat reiškia, kad derindami turite užtikrinti, kad derintuvas turėtų prieigą prie simbolių failų, susijusių su dvejetainiais vaizdais, nurodytais derinimo sesijos metu.

Norėdami naudoti bet kokį branduolio režimo derinimo įrankį, kad ištirtumėte vidines „Windows“ branduolio duomenų struktūros dalis (procesų sąrašą, gijų blokų sąrašą, įkeltų tvarkyklių sąrašą, atminties naudojimo informaciją ir kt.), jums reikia teisingų simbolių failų ir mažiausiai simbolio failas, skirtas branduolio dvejetainiam vaizdui - Ntoskrnl.exe. Simbolių lentelės failai turi atitikti dvejetainio vaizdo, iš kurio jie buvo išgauti, versiją. Pavyzdžiui, jei įdiegėte „Windows“ pakeitimų paketą arba tam tikrą pataisą, kuri atnaujina branduolį, turite atitinkamai atnaujinti simbolių failus.

Įvairių „Windows“ versijų simbolius atsisiųsti ir įdiegti lengva, tačiau atnaujinti pataisų simbolius ne visada įmanoma. Paprasčiausias būdas gauti derinimui reikalingą simbolių versiją yra susisiekti su specialiai tam skirtu Microsoft simbolių serveriu, naudojant specialią derinimo priemonėje nurodyto simbolio kelio sintaksę. Pavyzdžiui, dėl šio simbolio kelio derinimo įrankiai atsisiunčia simbolius iš internetinio simbolių serverio ir išsaugo vietinę kopiją c:\symbols:srv*c:\symbols*http://msdl.microsoft.com/download/ simboliai

Išsamias simbolių serverio naudojimo instrukcijas rasite derinimo įrankių pagalbos faile arba internete adresu http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx.

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

Pastaba: yURPMSHHKFE LPNBODH dumponas (8) DMS KHLBBOYS SDTH NEUFB, ZDE OHTsOP UPITBOSFSH BCHBTYKOSHCHE DBNRSCH. rPUME OBUFTPKLY RP LPNBODE apsikeitimas (8) TBDEMB RPDLBYULY DPMTSOB VSHFSH CHSHCHBOB RTPZTBNNNB sąvartynas . 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 konfigūracija LPOZHYZHTBGYPOOPZP ZHBKMB CHBYEZP SDTB. fBLPK URPUPV YURPMSHЪPCHBFSH OE TELPNEODHEFUS Y, PAGAL DPMTSEO YURPMSHЪPCHBFSHUS, FPMSHLP EUMY CHSCH IPFYFE RPMKHYUBFSH BCHBTYKOSHCH PVTBSCH RBNSFY SDTB, LPFPTOPPE BCHBTYEFTBVPЪCHBTYKTY ЪLE.

Pastaba: 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 APIE (kgdb) .

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

# cp branduolys kernel.debug # strip -g branduolys

bFPF YBZ OE FBL HC Y OEPVIPDYN, OP TELPNEODKHEN. (PH FreeBSD 4th VPMEE TEMYYBI LFPF YBZ CHSPRMOSEFUS BCHFPNBFYUEULY CH LPOGE RTPGEUUB RPUFTPEOOYS SDTB markė Įdiegti SCHN PVTBBPN, OVTTBCH.

ъBNEFSHFE, YuFP CH UFBTSHCHETUISI „FreeBSD“ (DP 3.1, OE CHLMAYUBS LFPF TEMY), YURPMSHHEFUS SDTB CH ZHTNBFE a.out, RPFPNH YI FBVMYGSH UYNCHPMPCH DPMTSOSCH TBURPPUMBZBSOPFShu CHRBFPFPNSBSOFShu. 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 TBHVPFBFSH U DTHZYN TBVPFBFSH U DTHZYN USDTPSHPHFPONH YTPCHBOYA, ЪBZTHTSBKFE EZP FPMSHLP CH PDOPRPMSHЪPCHBFEMSHULPN TETSYNE RTY RPNPEY ZHMBZB -s , KHLBSCCHBENPZP RTY ЪBZTH JLE, B ЪBFEN CHSHRPMOYFE FBLYE YBZY:

# fsck -p # mount -a -t ufs # kad jūsų /var/crash failų sistema būtų įrašoma # savecore -N /kernel.panikuotas /var/crash # išeiti # ...į kelių vartotojų

bFB RPUMEDPCHBFEMSHOPUFSH KHLBSCCHBEF RTPZTBNNE savecore (8) APIE YURPMSHЪPCHBOYE DTHZPZP SDTB DMS YЪCHMEYUEOYS UYNCHPMYUEULYI YNEO. YOBYUE POB VKhDEF YURPMSHЪPCHBFSH SDTP, TBVPFBAEE CH DBOOSHK NNEOF Y, ULPTEE CHUEZP, OYUEZP OE UDEMBEF, RPFPNH YuFP BChBTYKOSHCHK PVTB RBNSFY YYNCHPMSYUBFFSTB F.

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

Simbolio failas kernel.debug exec-file /var/crash/kernel.0 core-file /var/crash/vmcore.0 Y CHBMS - CHCH NPTSEFE PFMBTSYCHBFSH BCHBTYKOSHK DBNR, YURPMSHЪHS YUIPDOSCH FBLCEFPEMBESCH FBLCE FFEMBYu SDTB 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:Scenarijus pradėtas 1994 m. gruodžio 30 d., penktadienį, 23:15:22 sys/compile/URIAH/kernel ...atlikta. 5:IdlePTD 1f3000 6:panika: nes tu sakei! 7: dabartinė PCB esant 1e3f70 8: Nuskaitomi simboliai, skirti ../../i386/i386/machdep.c...atlikta. 9: (kgdb) kur 10:#0 įkrova (arghowto=256) (../../i386/i386/machdep.c, 767 eilutė) 11:#1 0xf0115159 panikoje () 12:#2 0xf01955bied (diediedied ) (../../i386/i386/machdep.c, 698 eilutė) 13:#3 0xf010185e, esantis db_fncall () 14:#4 0xf0101586, esantis db_command (-266509132, -36509132, -266509132, -3:51,1:06) 0101711 į db_command_loop () 16:#6 0xf01040a0 į db_trap () 17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723) 18:#6, in trap_9 0x 019ce60 in trap_pfault ( ...) 20:#10 0xf019cb2f spąstuose (...) 21:#11 0xf01932a1 išimties atveju:calltrap () 22:#12 0xf0191503 cnopen (...) 23:#13 0xf4 in13o 0xf4 24: #14 0xf012d014 in vn_open () 25:#15 0xf012a183 in open () 26:#16 0xf019d4eb in syscall (...) 27: (kgdb) aukštyn 10 28: Skaitymas in/i.3/6 simboliais. /i386 /trap.c...atlikta. 29:#10 0xf019cb2f spąstuose (kadras = (tf_es = -260440048, tf_ds = 16, tf_\ 30:edi = 3072, tf_esi = -266445372, tf_ebp = -3:7_26 30396, tf_ebx = - 266427884, tf_edx = 12, tf_ecx = -266427884, tf\ 32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, -272695296, -3:tf_3 -6_3 2664693 68, tf_flags = 66066, tf_esp = 3072 , tf_\ 34:ss = -266427884)) (../../i386/i386/trap.c 283 eilutė) 35:283 (void) trap_pfault(&frame, FALSE); 36: (kgdb) frame frame->tf_ebp frame->tf_eip 37:Simbolių skaitymas, skirtas ../../i386/isa/pcvt/pcvt_drv.c...atlikta. 38:#0 0xf01ae729 programoje pcopen (dev=3072, flag=3, mode=8192, p=(struct p\ 39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c eilutė 403) 40:403 return ((*linesw.l_open)(dev, tp)); 41: (kgdb) sąrašas 42:398 43:399 tp->t_state |= TS_CARR_ON; 44:400 tp->t_cflag |= CLOCAL; /* negali būti modemas (:-) */ 45:401 46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200) 47:403 return ((*linesw.l_open)(dev, tp)); 48:404 #else 49:405 return ((*linesw.l_open)(dev, tp, flag)); 50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */ 51:407 ) 52: (kgdb) spausdinti tp 53: Simbolių skaitymas ../../i386/i386/cons.c...atlikta. 54:$1 = (struct tty *) 0x1bae 55: (kgdb) spausdinti tp->t_line 56:$2 = 1767990816 57: (kgdb) aukštyn 58:#1 0xf0191503 naudojant cnopen (dev=0x0000=3, 0x000000 , p=(st\ 59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c 126 eilutė) 60: return ((*cdevsw.d_open)(dev, flag, mode, p) ); 61: (kgdb) aukštyn 62:#2 0xf0132c34 spec_open () 63: (kgdb) aukštyn 64:#3 0xf012d014 vn_open () 65: (kgdb) aukštyn 66:#4 0xf012a186) (kg) aukštyn 68:#5 0xf019d4eb in syscall (frame=(tf_es = 39, tf_ds = 39, tf_edi =\ 69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_7, 2 x = 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 = 58p, \tf_2 = 5 -7, 2 _ss = 39)) (. ./../i386/i386/trap.c line 673) 73:673 error = (*calp->sy_call)(p, args, rval); 74: (kgdb) aukštyn 75: pasirinktas pradinis kadras; tu negali pakilti. 76: (kgdb) quit 77: # exit 78:exit 79: 80:Scenarijus padarytas 1994 m. gruodžio 30 d. penktadienį 23:18:04

lPNNEOFBTYY L CHSHCHYYERTYCHEDEOOPNH TSHTOBMKH:

UFTPLB 6:

ьФП DBNR, CHSFSHCHK RTY RPNPEY DDB (UNPFTY OITSE), RPPFPNH LPNNEOFBTYK L BCHBTYKOPNH PUFBOPCHH YNEEF YNEOOP CHYD ``kadangi tu sakei!'' Y FTBUUYTPCHLB UFELB ZMHVPLUBBTYK; 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 APIE RTBCHYMSHOP TBURPMPTSEOYE, DBCE CH UMHUBE BCHBTYKOPZP PUFBOPCHB. zMSDS APIE UFTPLH YUIDOPZP LPDB 403, NPTsOP ULBBFSH, YuFP CHEUSHNB CHETPSFOP, YuFP MYVP CHYOPCHBF DPUFHR RP KHLBBFEMA ``tp", MYVP VSHM CHSHCHIPD ЪBNB ZТBOYGSHB.

UFTPLB 52:

rPIPTSE, YuFP CHYOPCHBF KHLBBFEMSH, OP ON SCHMSEFUS DPRKHUFYNSCHN BDTEUPN.

UFTPLB 56:

pDOBLP, PYUECHYDOP, UFP ON KHLBSCCHBEF APIE 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 GEMPEOSYuOP YUBUFSHHA NBMEOSY.)

  • Autoriai:

    Barinovas S.S., Ševčenka O.G.

  • Metai:
  • Šaltinis:

    Informatika ir kompiuterinės technologijos / VI tarptautinės studentų, magistrantų ir jaunųjų mokslininkų mokslinės techninės konferencijos medžiaga - 2010 m. lapkričio 23-25 ​​d., Doneckas, DonNTU. - 2010. - 448 p.

anotacija

Pateikiama lyginamoji derinimo vartotojo režimo ir branduolio režimo analizė Microsoft Windows operacinės sistemos atžvilgiu, išryškinami pastarosios derinimo organizavimo skirtumai ir problemos. Remiantis gautais rezultatais, suformuluoti pagrindiniai reikalavimai branduolio režimo derintuvų kūrimui avarinio ir interaktyvaus derinimo atveju. Atlikta esamų sprendimų atitikties reikalavimams analizė. Ypatingas dėmesys skiriamas Microsoft Windows Debugger.

Pagrindinė dalis

Derinimas yra programinės įrangos klaidų priežasčių nustatymo ir pašalinimo procesas. Kai kuriuose projektuose derinimas trunka iki 50 % viso kūrimo laiko. Derinimas gali būti labai supaprastintas naudojant specializuotus įrankius, kurie nuolat tobulinami. Pagrindinis toks įrankis yra derintuvas, leidžiantis kontroliuoti programinės įrangos vykdymą, stebėti jos eigą ir trukdyti. Branduolio derinimo įrankius pirmiausia naudoja tvarkyklių kūrėjai.

Programinės įrangos kūrimo įrankiai programuotojui siūlo daugybę galimybių. Bet kuri integruota kūrimo aplinka apima galimybę derinti nenaudojant trečiųjų šalių paslaugų. Jei kalbame apie sistemos programinę įrangą ir ypač tvarkyklių kūrimą, tai dėl jos specifikos kūrimo procesas yra itin sunkus ir mažai automatizuotas. Visi kūrimo etapai, įskaitant derinimą, yra atskiri. Kiekvienam iš jų atlikti reikalingos specialios sąlygos: pilnavertėje kompiuterinėje sistemoje rašomas programos kodas, derinimo sistemoje – derinimas, testavimas, priklausomai nuo aplinkybių ir kt. Pats branduolio režimo derintuvas yra sunkiau išmokstamas ir atitinkamai mažiau draugiškas.

Apskritai galime kalbėti apie branduolio derinimo įrankių trūkumą. Nors tokių priemonių yra, apie alternatyvas dažnai nekalbama. Pavyzdžiui, „Microsoft Windows Debugger“ turi labai aukštą įėjimo slenkstį. Daugelis programuotojų kalba apie pirmąją neigiamą patirtį, kai ją sutinka, ir dauguma jos galimybių lieka nepanaudotos.

Atsižvelgiant į virtualiosios adresų erdvės struktūrą, jei programa padaro klaidą, dėl kurios programa įrašo duomenis į savavališką atminties vietą, programa tik sugadins savo atmintį ir neturės įtakos kitų programų veikimui bei operacinei sistemai. . Nors branduolio režimo programos kodas gali pažeisti svarbias operacinės sistemos duomenų struktūras, o tai neišvengiamai sukels bendrą gedimą. Neefektyviai parašyta tvarkyklė taip pat gali sukelti rimtą visos operacinės sistemos pablogėjimą.

    Šiuolaikiniai derintuvai atlieka šias pagrindines funkcijas:
  • derinimas šaltinio kodo lygiu;
  • vykdymo valdymas;
  • peržiūrėti ir keisti atmintį;
  • procesorių registrų turinio peržiūra ir keitimas;
  • skambučių krūvos peržiūra.

Kad būtų lengviau dirbti su išardytu kodu, vadinamasis. derinimo simboliai. Veikiant linkeriui, be vykdomojo failo vaizdo gali būti sukurtas ir duomenų failas, kuriame yra informacija, kuri nėra būtina vykdant programą, tačiau yra itin naudinga ją derinant: funkcijų pavadinimai, globalūs kintamieji, aprašymai. konstrukcijų. Derinimo simboliai galimi visoms „Windows“ operacinės sistemos vykdomosioms programoms.

Vykdymo kontrolė reiškia galimybę pertraukti ir atnaujinti programos kodo vykdymą pasiekus nurodytą komandą programos kode. Jei programos kodas vykdomas žingsnis po žingsnio režimu, kiekvienam programavimo kalbos žetonui arba išeinant iš paprogramės įvyksta pertraukimas. Laisvo vykdymo metu vykdymo pertraukimai atsiranda iš anksto nustatytose kodo dalyse - vietose, kur nustatomi lūžio taškai.

Pertraukiant branduolio režimo kodą, iškyla tokia dilema. Derinimo priemonė sąveikauja su programuotoju naudoja vartotojo sąsają. Tie. bent jau matoma derinimo priemonės dalis veikia vartotojo režimu ir natūraliai naudoja programų programavimo sąsają (Windows API), kuri savo ruožtu remiasi branduolio režimo moduliais, kad ją sukurtų. Taigi, branduolio režimo kodo pristabdymas gali sukelti aklavietę: sistema nustos reaguoti į vartotojo užklausas.

Norint pasiekti branduolio atmintį, derinimo priemonės dalys taip pat turi veikti branduolio režimu. Tai vienu metu sukelia dvi problemas, kurios yra akivaizdžios atminties organizavimo procesoriaus apsaugotu režimu pasekmė.

Pirmoji problema susijusi su virtualios atminties adresų vertimu. Vairuotojai nuolat sąveikauja su vartotojo režimo programomis, pasiekdami savo atmintį. „Windows“ operacinė sistema verčia virtualius adresus į fizinius adresus pagal gijos konteksto koncepciją. Gijos kontekstas yra struktūra, atspindinti gijos būseną ir apimanti, visų pirma, registrų rinkinį ir tam tikrą kitą informaciją. Kai valdymas perkeliamas į kitą giją, įvyksta konteksto perjungimas, kuris išsaugo informaciją apie vieną giją ir atkuria informaciją apie kitą. Kai gijos kontekstas perjungiamas į kito proceso giją, puslapių katalogas, naudojamas virtualiems adresams paversti fiziniais, taip pat persijungia.

Ypatumas tas, kad siunčiant sistemos skambučius, Windows operacinė sistema neperjungia konteksto. Tai leidžia branduolio režimo kodui naudoti vartotojo režimo virtualius adresus.

Situacija skiriasi siunčiant pertraukimus arba vykdant sistemos gijas. Pertraukimas gali įvykti bet kuriuo metu, todėl nėra galimybės numatyti, kuris gijos kontekstas bus naudojamas. Sistemos gijos nepriklauso jokiam procesui ir negali išversti vartotojo režimo virtualių adresų. Iš to išplaukia, kad tokiais atvejais negalima pasiekti vartotojo režimo atminties.

Antroji problema yra prieiga prie perkeliamos atminties. Dauguma atmintyje esančios informacijos yra perkeliama ir bet kada gali būti perkelta iš fizinės atminties į standųjį diską į puslapio failą. Jei pasiekiamas puslapis, kurio nėra fizinėje atmintyje, procesorius paprastai sugeneruos puslapio gedimo pertraukimą, kurį tvarkytų atminties tvarkyklė, todėl puslapis nuskaitomas iš puslapio failo ir įkeliamas į fizinę atmintį.

Šis elgesys sugenda, jei derinimo kodas yra priverstas naudoti aukštus pertraukimo užklausos lygius (IRQL). Jei IRQL atitinka arba viršija atminties tvarkyklės IRQL, pastaroji negalės įkelti trūkstamo puslapio, nes operacinė sistema blokuos puslapio gedimo pertraukimą. Dėl to operacinė sistema sugenda.

Derinimas paprastai skirstomas į interaktyvųjį ir avarinį. Atliekant interaktyvų vietinį derinimą, derinimo priemonė veikia toje pačioje sistemoje kaip ir derinimo priemonė. Atliekant interaktyvų nuotolinį derinimą, derinimo priemonė ir derinimo tikslas veikia skirtingose ​​sistemose. Derinant branduolio kodą, sistema turi būti valdoma nuo pirmųjų jos įkrovos etapų, kai tinklas dar nefunkcionuoja, todėl komunikacijai tarp sistemų naudojamos paprastos nuoseklios sąsajos, tokios kaip COM, FireWire, USB. Pastaruoju metu dėl skirtingų abstrakcijos lygių programinės įrangos virtualizacijos vystymosi tendencijų vis dažniau naudojamos virtualios mašinos. Svečių OS veikia kaip derinimo OS, priglobtoje OS yra derinimo vartotojo sąsaja.

Todėl avariniam derinimui nebūtina, kad bandomajame kompiuteryje būtų įdiegtas derinimo įrankis. „Windows“ operacinės sistemos platinimas apima avarinio derinimo diegimo mechanizmus. Prieš paleisdama iš naujo, operacinė sistema gali išsaugoti informaciją apie savo būseną, kurią kūrėjas gali analizuoti ir išsiaiškinti priežastį. Tokia informacija, įrašyta į failą, vadinama atminties iškeltuve.

Pagrindinius branduolio režimo derinimo įrankius pateikia pats „Windows“ operacinės sistemos gamintojas kaip laisvai platinamo „Windows“ derinimo įrankių paketo dalį. Įrankius sudaro atitinkamai grafiniai ir konsoliniai derintuvai WinDbg ir KD (toliau – Windows Debugger). Šių derintuvų darbas pagrįstas mechanizmais, kuriuos pateikia operacinės sistemos kūrėjai ir kurie yra įterpti į jos branduolį.

Pagrindinis „Windows Debugger“ režimas yra komandų interpretatoriaus režimas. Dėl savo modulinės struktūros „Windows Debugger“ be kūrėjo pateiktų komandų palaiko ir trečiųjų šalių modulius, vadinamus plėtiniais. Tiesą sakant, dauguma integruotų komandų taip pat supakuotos kaip plėtiniai.

„Windows Debugger“ yra orientuota į nuotolinį interaktyvų ir avarinį derinimą, kuris, kai naudojamas, atskleidžia visas savo galimybes. Tuo pačiu metu pilnas vietinis interaktyvus derinimas nepalaikomas: derintuvas leidžia peržiūrėti tik kai kurias branduolio struktūras.

Yra Marko Russinovičiaus sukurtas „Windows Debugger“ plėtinio modulis LiveKD, kuris tam tikra prasme įgyvendina vietinį interaktyvų derinimą. LiveKD sukuria darbinės sistemos atminties išklotinę ir naudoja ją derinimui.

„Windows“ derinimo įrankių paketas yra reguliariai atnaujinamas ir palaiko visas šiuolaikines „Windows“ operacines sistemas.

„SoftICE“ branduolio derinimo priemonė, kurią „Compuware“ pagamino „DriverStudio“ programinės įrangos pakete, tradiciškai buvo alternatyva „Windows“ skirtų derinimo įrankių paketui. Išskirtinis SoftICE bruožas buvo vietinio interaktyvaus derinimo įdiegimas palaikomoje aparatinėje įrangoje. Derintuvas galėjo beveik visiškai valdyti operacinės sistemos veikimą.

Nuo 2006 m. balandžio 3 d. „DriverStudio“ šeimos produktų pardavimas buvo nutrauktas dėl „įvairių techninių ir verslo problemų, taip pat dėl ​​bendrų rinkos sąlygų“. Naujausia palaikoma operacinės sistemos versija yra „Windows XP Service Pack 2“. Paprastai pakeitimų paketai nekeičia operacinės sistemos taikomosios programos sąsajos, tačiau gali pasikeisti sistemos skambučių numeriai ir kita nedokumentuota informacija. SoftICE derinimo priemonė rėmėsi sunkiai užkoduotais vidinių duomenų struktūrų adresais. Dėl to suderinamumas nutrūko išleidus 3 pakeitimų paketą. Akivaizdu, kad vėlesnės „Windows“ operacinės sistemos versijos taip pat nepalaikomos.

„Syser Kernel Debugger“ sukūrė nedidelė Kinijos įmonė „Sysersoft“ kaip „SoftICE“ derinimo priemonės pakaitalas. Pirmoji galutinė versija buvo išleista 2007 m. Kaip ir SoftICE, Syser Kernel Debugger gali interaktyviai derinti veikiančioje sistemoje. Palaikomi tik 32 bitų šiuolaikinių „Windows“ versijų leidimai.

Šiuo metu „Windows Debugger“ yra pagrindinis įrankis tarp branduolio modulių kūrėjų. Jį taip pat naudoja „Windows“ operacinės sistemos branduolio komanda.

Kartais pasitaiko situacija, kai „Windows“ laukia branduolio derintuvo įkėlimo laiko. Matote tekstą „Windows start“, bet ne logotipą.

Jei dabar pridedu derintuvą, paleidžiama „Windows 7“ logotipo animacija. Po to logotipas pradeda pulsuoti. Šiuo metu atsisiuntimo procesas nebevyksta. CPU apkrova sumažinama iki minimumo. Paprastai laukiu kelias minutes, bet nieko neįvyksta.

Taip nutinka ne visada. Tačiau jei taip atsitiks, VM nustatymas iš naujo nepadės. Norėdami išspręsti šią problemą, turiu naudoti paleidimo taisymą. Deja, tai trunka amžinai.

Turite idėjų, ką galėčiau padaryti, be paleidimo taisymo?

Iš anksto dėkoju!

3

2 atsakymai

Norėdami išspręsti problemą, su kuria susiduriate, įkrovos metu tiesiog paspauskite F10. Ir pašalinti / derinti ir susijusius parametrus. Tada paspauskite enter.

Patarimas: nenaudokite /debug kaip numatytosios įkrovos meniu parinkties. Nukopijuokite įkrovos konfigūraciją į naują įrašą. Tada nustatykite derinimo režimą. „Windows“ nežino, kada naudosite derinimo priemonę. Todėl jis turi laukti.