Түзеткіш қалай жұмыс істейді. Windows операциялық жүйесіне арналған ядро ​​режимін жөндеу құралдары Ядро жөндеу дегеніміз не

Windows жүйесіне арналған ядро ​​деңгейіндегі лайықты жөндеушілер аз, бірақ Linux жүйесінде оларды саусақпен санауға болады, тіпті олар негізінен шикі, аяқталмаған немесе тастанды және мүк басып кеткен ... Бүгін біз ең танымал туралы сөйлесетін боламыз. және олардың ең қызықтысы -
Линица.

Кіріспе

Аты-жөнінен болжауға болатындай, Линицааңыздың бейресми «порты» болып табылады
Linux үшін SoftICE, интерфейсті, командалық жүйені және соңғысының көптеген мүмкіндіктерін сақтаған: жылдам пернені пайдаланып қалқымалы терезе (ішінде ЛиницаБұл ); барлық функциялар мен жүйелік шақыруларда аппараттық тоқтау нүктелерін орнату; GDT/LDT/IDT, физикалық жады беттерін қарау; GDB-ден алынған мүмкіндіктер (CALL пәрменімен ерікті функцияны шақыру, регистр контекстін, ішкі айнымалыларды сақтау/қалпына келтіру және т.б.).

Қайта енбейтін және қорғау арқылы оңай анықталатын ptrace механизмі арқылы жұмыс істейтін басқа түзеткіштердің көпшілігінен айырмашылығы (оның Windows аналогы DEBUG_PROCESS, қолданбаны жөндеушілер пайдаланады), Линицаекі отладчикке басқалар өңдей алмайтын жоғары қорғалған бағдарламаларды жөндеуге мүмкіндік беретін SoftICE-дегі сияқты жергілікті бақылауды пайдаланады.

Шын мәнінде, бұл порт емес (демек, тырнақшалар), бірақ нөлден бастап жазылған және бастапқы кодта тегін таратылатын тәуелсіз жоба (SoftICE-дан тек шабыт бар). 2.4 ядросына арналған кодтың негізгі бөлігін неміс хакері Горан Девич жазған, бірақ 2.6 ядросын қолдауға мүлде басқа адамдар қатысқан: Даниэль Резник, Питер К. және Карлос Мануэль Дюклос Вергара. Ал біздің жерлесіміз - Олег Худаков ассемблер файлдарын насмнан қайта жазды
gcc.

Бастапқы мәтіндер жобаның ресми сайтында -
Жол% 0A.com">www.Linice.com, сонымен қатар құжаттама, қысқа ЖҚС және форумға сілтеме бар.
Жол% 0A">groups.google.com/group/Linice. Дайын екілік жинақтар жоқ.
Жобаны жасаушылар SourceForge сайтында өз аккаунттарын ашты, бірақ оған кез келген файлды жүктеп салуға тым жалқау болып, сапасы өте төмен 3 скриншотты ғана ұсынды:
.

Жүйе талаптары

Соңғы нұсқасы Линица 2.6 нөмірленген және 2005 жылдың 28 шілдесінен басталады, 2.4.x ядросы мен VGA консоль режимін толығымен қолдайды. Жаңа ядролармен күрделі мәселелер бар және 2.6.x ядросы тек шектеулі қолдауға ие.
Түзеткіш Debian 2.6 астында әзірленді және сынақтан өтті. Оның басқа дистрибуциялармен үйлесімділігіне кепілдік берілмейді, бұл бізді бубенге жүгінуге мәжбүр етеді, бірақ кейбір жағдайларда тіпті домбыра көмектеспейді. Шындығында, жұмыс істеу үшін Debian-ды машинада сақтаңыз Линица, - бұл қалыпты жағдай. Ұзақ уақыт бұрын, NT үшін SoftICE қолданбасы әлі болмаған кезде, көптеген хакерлер Win 9x-ті бағдарламаларды бұзу үшін орнатты, бірақ олар өздерінің астында отырды.
Н.Т. Өйткені орнатудың барлық қыр-сырын қамту үшін Линицабір мақала аясында бұл іс жүзінде мүмкін емес, мен жинақтау мен іске қосу процесін сипаттаумен шектелемін. Линицабір нақты дистрибутив бойынша - консольдік VGA режимінде ядросы 2.4.1 бар Knoppix 3.7.
Линица ACPI және мультипроцессорлық машиналарды қолдайды, бірақ X-мен жақсы жұмыс істемейді, әсіресе nVidia-дан басқа видеокарталарда ол 24 биттік түс тереңдігін мүлде қабылдамайды, тек 8, 16 және 32 биттерді «қорытады», сондықтан ол ыңғайлырақ. VT100 протоколы арқылы COM порты арқылы қосылған қашықтағы терминал арқылы X қолданбаларын жөндеу үшін бұл жағдайда жергілікті пернетақта да онымен жұмыс істейді.
Линица!

Linice құрастыру және конфигурациялау

Бастапқы мәтіндердің gzip мұрағатын жүктеп алыңыз www. Линица.devic.us/ ЛиницаМегабайттан сәл аз орын алатын -2.6.tar.gz оны дискіге орамасынан шығарып, ./docs каталогына өтіп, readme файлынан біз отладчиктің 2.4 ядросы үшін төмендегідей құрастырылғанын білеміз:

# CD құрастыру
# ./жасау_қоқысы-2.4
# CD ../bin
# тазалау; мак e

Дегенмен, make іске қоспас бұрын ./bin-2.4/Makefile файлын ашып, мақсатты платформаның конфигурациясы мен архитектурасына сәйкес «TARGET» жолын өңдеуіңіз керек. Атап айтқанда, көп ядролы немесе HyperThreading процессорлары бар ACPI машиналарында ол келесідей болады:

TARGET = -DSMP -DIO_APIC

Компиляция аяқталғаннан кейін ./bin каталогында көптеген файлдар мен каталогтар болады, бірақ тек маңыздылары:

linsym – отладчикті жүктеу модулі;
linince.dat – конфигурация файлы;
xice – X үшін қолдау, мәтіндік режимде жұмыс істегенде оны жоюға болады;
./Linice_2.4.27/Linice.o – түзеткіштің өзін қамтитын жүктелетін ядро ​​модулі.

Құру процесі Линица

Ең аз жұмыс істейтін жинақты жинағаннан кейін, қалғанының бәрін - ./test каталогында орналасқан және компиляция сценарийімен құрастырылған демонстрациялық жөндеу мысалдарын, сондай-ақ кеңейтім модулін (біздің ойымызша, плагин) алу жақсы болар еді. make пәрменімен құрастырылған және insmod пәрмені арқылы жүктелетін ./ext каталогы. Оның пайдасы жоқ, бірақ бастапқы кодты зерттегеннен кейін біз функционалдылықты кеңейтетін өз модульдерімізді жаза аламыз.
Линица.

Knoppix жүктеген кезде экранның төменгі жолында «knoppix 2 vga=normal» енгізу керек «жүктеу:» сұрауы пайда болады, «knoppix» алдау коды 2.4 ядросын таңдайды (әдепкі бойынша автоматты түрде жүктеледі, сондықтан «knoppix». алып тастауға болады), " 2" X" жүктеуді блоктайды және "vga=қалыпты" 80x25 ажыратымдылығы бар стандартты vga режимін орнатады.

Жүктеп алудың аяқталуын күткеннен кейін біз «su», содан кейін «passwd» дейміз және «a» түбірі үшін жаңа құпия сөзді енгіземіз, оның астында жүйеге кіру пәрмені арқылы дереу кіреміз. Егер бұл орындалмаса, әрекет ету. бастау Линица«сегментация ақауы» деген айқаймен сынған сәтсіздікпен аяқталады.

Knoppix қолданбасын қатты дискіден жүктегенде (оны LiveCD сеансының астынан терминал терезесінде терілген «sudo knoppix-installer» пәрменімен орнатуға болады), таңдаулы Linux ядроларының тізімі бар бастау мәзірі пайда болады (2.4)-1 және басыңыз жүктеу параметрлерін орнату үшін - “2 vga=normal”. Ядро таңдалғандықтан, «knoppix» сөзін жазудың қажеті жоқ. Жүктеп алу аяқталғаннан кейін кіру пәрменін беріңіз және түбір ретінде кіріңіз (есептік жазба бұрын жасалған деп есептей отырып).

Түзеткіш ./linsym –i пәрменімен іске қосылады, содан кейін ол бірден экранда пайда болады. Егер бұл орын алмаса, диагностикалық хабарларды көрсету үшін "--verbose 3" қосқышын көрсетіп көріңіз.
Жүктеу сәтсіздігінің себептерінің бірі ядро ​​функцияларының мекенжайларын қамтитын /boot/System.map файлының болмауы болуы мүмкін. Сондай-ақ, System.map мазмұны ағымдағы ядроға сәйкес келмесе, жүктеп алу сәтсіз болады, мысалы, ол қайта құрастырылған кезде орын алуы мүмкін. Кейбір тарату компиляторлары не System.map қолданбасын мүлде қамтымайды (бұл жүйенің қауіпсіздігін күшейтеді деп есептейді, өйткені руткиттер үшін жүйелік қоңырауларды ұстау қиынырақ болады) немесе олар бұл жерде мүлде қате орналасады және қай жерде екені белгісіз. ол келді. Мұндай жағдайларда, егер ол /boot орнынан басқа жерде орналасқан болса, «-m» қосқышы арқылы отладчикті System.map файлына апаратын жолға көрсетіп, ядроны жай ғана қайта құрастыру жеткілікті. Осылайша, қауіпсіздік бұзылмайды және Линицажұмыс істей алады!
Түзеткіш жүйеге келесі арқылы қайтарады немесе «x " Комбинация кез келген бағдарламадан отладчикті шақырады. Дегенмен, біз өзімізді оның контекстінде табатынымыз мүлдем шындық емес, өйткені Linux - бұл процестерді бірінен соң бірі ауыстыратын көп тапсырмалы жүйе, ал ADDR (контекстік коммутация) командалары «лексиконда» орналасқан. Линицаәлі де жоқ, қашан пайда болатыны белгісіз. Сондықтан, белгілі бір бағдарлама пайдаланатын жүйелік қоңырауларға тоқтау нүктелерін орнату немесе INT 03h әдісін пайдаланып процесті бұзу арқылы айлакер болуыңыз керек, ол туралы қазір айтатын боламыз.

Сол linsym-ге берілген «-x» қосқышы отладчикті түсіруге жауап береді (егер сіз оны шынымен түсіргіңіз келсе).

Жұмыс істеу негіздері Линица

SoftICE-мен жұмыс істегендер үшін, меңгеру Линицаеш қиындық тудырмайды. Мұнда бірдей пәрмендер қолданылады: D – жад демпі, E – жадты өңдеу, T – қадамдық бақылау, P – функцияларды енгізбей бақылау, R – регистрлерді қарау/өзгерту, BPM/BPX – жадқа кіру үшін тоқтау нүктесін орнату /орындау және т.б. Пәрмендердің толық тізімі HELP арқылы шақырылатын кірістірілген анықтамада да (айтпақшы, «HELP пәрменінің_аты» пәрмен туралы қосымша ақпаратты береді) де, стандартты құжаттамада да бар.

Басайық және көк түспен белгіленген ағымдағы процесс PROC пәрменімен көрсетілетін процестер тізімін қарап шығыңыз:

:PROC

1 0000 C1C3E000 SLEEPING 0 0 init
2 0000 F7EE8000 ҰЙҚЫ 0 0 keventd
3 0000 F7EE2000 ҰЙҚЫ 0 0 ksoftirqd_CPU0
4 0000 F7EE0000 ҰЙҚЫ 0 0 ksoftirqd_CPU1
5 0000 F7ED0000 ҰЙҚЫ 0 0 kswapd
6 0000 F7EAA000 SLEEPING 0 0 bdflush
7 0000 F7EA8000 ҰЙҚЫ 0 0 жаңартылды
56 0000 F6A36000 ҰЙҚЫ 0 0 кжурнал
1006 0000 F7A34000 ОРЫНДАУ 0 0 автомонтаж
1013 0000 F68E6000 ҰЙЫҚТАУ 0 0 кесе
...
1105 0000 F6DDE000 ҰЙЫҚТАУ 0 0 мк
1106 0000 F6DD4000 SLEEPING 0 0 cons.saver

Процестер, әрине, жақсы, бірақ біз әлі де бағдарламаларды қалай түзетеміз? Ең қарапайым нәрсе - INT 03h нұсқауына сәйкес келетін CCh машинасының нұсқауын алдымен бастапқы байттың мазмұнын жазып алып, кіріс нүктесіне енгізу. Мұны кез келген он алтылық редактормен жасауға болады, мысалы, мен бірнеше рет айтқан
HTE.

Файлды редакторға жүктегеннен кейін түймесін басыңыз (режим), эльф/суретті таңдаңыз, курсорды «енгізу нүктесі:» орнына жылжытыңыз, түймесін басыңыз (өңдеу) және бірінші байтты CCh деп өзгертіңіз, өзгертулерді сақтаңыз (сақтау) және кетіңіз. Түзетілген бағдарламаны іске қосқанда Линица CCh арқылы жасалған ерекше жағдайға байланысты бірден пайда болады, содан кейін EIP аяқталуын көрсетеді
CCh.

Түзеткіш пайда болған кездегі түзетілген кіру нүктесі бар бағдарламаның күйі

0023:080482C0 CC int 3
0023:080482C1 ED in eax, dx
0023:080482C2 5E pop esi
0023:080482C3 89E1 mov ecx, esp

Курсор in eax,dx (EDh) нұсқауын көрсетеді, ол патчталған xor ebp,ebp (31h EDh) нұсқауының фрагменті болып табылады. Енді (теориялық тұрғыдан) біз CCh мәнін 31 сағатқа өзгерту арқылы бастапқы байтты қалпына келтіруіміз керек, EIP регистрін бірге азайтып, әдеттегідей бақылауды жалғастыруымыз керек.

Бірақ олай болмады! Линица- бұл, әрине, порт, бірақ тек өте өрескел және ол алдымен жазу үшін код сегментін ашсаңыз да, бет кескінінің жадын өзгерте алмайды. Е (өңдеу), F (толтыру), M (жад көшірмесі) де жұмыс істемейді! Бірақ стекке жазу жұмыс істейді және бұл хакерлерге жеткілікті.

Біз EIP регистрінің ағымдағы мәнін есте сақтаймыз; патчтелген машина командасын стектің жоғарғы жағына көшіру; сол жерде CCh байтты қалпына келтіріңіз; біз EIP мәнін өзгерте отырып, оған басқаруды береміз; біз оны іздестірудің бір әрекетін орындау арқылы жүзеге асырамыз; және EIP өз орнына, яғни келесі машина командасына қайтарыңыз:

INT 03h нұсқауымен ауыстырылған бастапқы байтты қалпына келтіру

; Стектің үстінде не бар екенін көрейік (таза қызығушылықпен).
:d esp-10
0018:BFFFEFC0 C0 82 04 08 00 00 00 00 5D 0C 00 40 DC EF FF BF

; Жамалған машина командасын стектің жоғарғы жағына көшіреміз.
; 10h саны - x86 құрылғысындағы нұсқаудың максималды мүмкін болатын өлшемі.
:m eip-1 L 10 esp-10

; Стек қалай өзгергенін көрейік.
:d esp-10
0018:BFFFEFC0 CC ED 5E 89 E1 83 E4 F0 50 54 52 68 F0 85 04 08

; Иә! Стек шынымен өзгерді, 31 сағатта CCh түзететін уақыт келді.
:e esp-10 31
Жедел деректерді өңдеу әлі орындалмаған.

; Ой! Линицеде тікелей деректерді тағайындау жүзеге асырылмайды,
; бірақ біз қоқысты интерактивті түрде өңдей аламыз (сонымен бірге
; SoftICE сияқты) немесе F esp-10 L 1 31 пәрменін беріңіз, тек есте сақтаңыз.
; SoftICE-ден айырмашылығы, Linice отладчик демп терезесін жаңартпайды,
; сондықтан F пәрменін орындағаннан кейін бұл көрінуі мүмкін
; нәтиже жоқ; шын мәнінде, бұл олай емес, сізге тек жаңарту керек
; D esp-10 пәрменімен төгіңіз, сонда бәрі орнына келеді.

; Біз басқаруды стекке көшірілген пәрменге береміз,
; EIP регистрінің мәнін есте сақтаңыз.
:r eip (esp-10)
reg:eip=BFFFEFC0

; Біз іздеудің бір әрекетін орындаймыз.
:t
0023:BFFFEFC2 5E pop esi

; Көріп отырғанымыздай, EIP регистрі 2 (BFFFEFC2h - BFFFEFC0h) = 02сағ артты,
; сондықтан келесі пәрменнің мекенжайы: 080482C1h - 01h + 02h = 080482C2h,
; мұндағы 080482C1h – бағдарламаға кіру кезіндегі EIP бастапқы мәні, ал 01h – INT 03h өлшемі.

; Біз патчталған нұсқаудан кейін EIP пәрменін орнаттық.
:r eip 80482C2
reg:eip=80482C2

Дабылмен билеудің осындай түрлері бар. Ал не істеу керек? Сонымен, біз отладчикке жүктелетін бағдарламаларды сұрыптадық; енді үзіліс нүктелерін жүйелік шақырулар мен ядро ​​функцияларына бөлеміз.

Exp пәрмені ядро ​​арқылы экспортталған атауларды басып шығарады, олардың кез келгені өрнектерде көрінуі мүмкін, мысалы, "bpx do_bkr" "bpx C012C9E8" дегенге тең.

Ядро арқылы экспортталған атауларды көрсету

:exp
ядро
C0320364 mmu_cr4_мүмкіндіктері
C02AC3A4 acpi_disabled
C02AC8A0 i8253_lock
...
C012BDA8 do_mmap_pgoff
C012C764 do_munmap
C012C9E8 do_brk
C011E990 exit_mm
C011E69C шығу_файлдары

Жүйелік қоңыраулар қиынырақ. бастап тікелей қолдау Линицабұл жерде емес (бірақ Linux ерекшеліктерін ескере отырып, бұл болуы керек), сондықтан бұл нәрсені қолмен жасау керек.

Жүйені шақыру кестесі, өзіңіз білетіндей, sys_call_table мекенжайынан басталатын қос сөздердің массиві (бұл айнымалы мән ядро ​​арқылы экспортталады).

Жүйелік қоңыраулар кестесі

; Түзеткішті қос сөзді көрсету режиміне ауыстырамыз.
:dd

; Біз кестені экранға шығарамыз.
:d sys_call_table
0018:C02AB6A8 C0126ACC F8932650 F89326A0 C013DC10
0018:C02AB6B8 C013DD18 C013D5C8 C013D724 C011F3BC
0018:C02AB6C8 C013D664 C014A8E0 C014A3B4 F893020C

Кестенің әрбір элементі өзінің жүйелік шақыруына сәйкес келеді және әрбір қоңыраудың өз нөмірі бар, оны /usr/include/sys/syscall.h файлынан табуға болады, бірақ мұны Linux астында жасамаған дұрыс. , онда тікелей нөмірлер жоқ, бірақ BSD-ден бір файлды алу үшін - бәрібір, барлық жүйелердегі негізгі жүйелік қоңыраулардың нөмірлері бірдей. Атап айтқанда, ашық жүйелік қоңырау 5 нөмірі болып табылады.

Ашық күйге тоқтау нүктесін орнату үшін оның адресін табу керек, ол жүйелік шақырулар кестесінің бесінші қос сөзінде орналасқан, нөлден бастап санау және тең (бұл жағдайда) C013D5C8h.

Ашық жүйе шақыруында тоқтау нүктесін орнату

; Ашық жүйелік қоңырауда тоқтау нүктесін орнатыңыз,
:bpx C013D5C8
; отладчиктен шығу,
:x
...
# кейбір файлды ашыңыз,
...
; отладчик бірден пайда болып, бізге бұл туралы айтады,
:BPX 01-ге байланысты үзіліс нүктесі

; Біз процеске қосылғанымызға көз жеткізу үшін proc пәрменін шығарамыз.
:прос
PID TSS Тапсырма күйінің uid gid атауы
1049 0000 F6364000 ҰЙҚЫ 0 0 Getty
1145 0000 F61CC000 ҰЙЫҚТАУ 0 0 мк
1146 0000 F614A000 ҰЙҚЫ 0 0 жағымсыз

Осылайша, қазірдің өзінде жұмыс істеп тұрған процестерді бұзу, олар пайдаланатын жүйелік қоңырауларға тоқтау нүктелерін орнату, сондай-ақ бұзу үшін маңызды көптеген басқа әрекеттерді орындау оңай.

Қорытынды

Оның айқын ылғалдылығына қарамастан, Линицақорғалған қолданбаларды жөндеу үшін өте қолайлы, дегенмен әдеттегі жөндеушілерде автоматты түрде орындалатын уақытша шешімдерге жиі жүгінуге тура келеді. Сондықтан Линица gdb мүлде алмастырмайды, тек оны толықтырады.

«Ядроны жөндеу» термині ядроның ішкі деректер құрылымын зерттеуді және/немесе ядродағы функцияларды кезең-кезеңмен қадағалауды білдіреді. Бұл жөндеу Windows жүйесінің ішкі жұмысын тексерудің өте пайдалы әдісі болып табылады, себебі ол басқа құралдарды пайдалану арқылы қолжетімсіз ішкі жүйелік ақпаратты көрсетуге мүмкіндік береді және ядродағы кодтың орындалу барысының нақты бейнесін береді.

Ядроны жөндеудің әртүрлі жолдарын қарастырмас бұрын, кез келген жөндеу түрін орындау үшін қажет файлдар жинағын қарастырайық.

Ядро жөндеуге арналған белгілер

Символдық файлдарда функциялар мен айнымалылардың атаулары, сондай-ақ деректер құрылымдарының орналасуы мен пішімі бар. Олар сілтеме бағдарламасы арқылы жасалады және жөндеушілер осы атауларға сілтеме жасау үшін және оларды жөндеу сеансы кезінде көрсету үшін пайдаланады. Бұл ақпарат әдетте екілік кодта сақталмайды, себебі код орындалған кезде қажет емес. Бұл онсыз екілік код кішірейіп, жылдамырақ жұмыс істейтінін білдіреді. Бірақ бұл сонымен қатар отладтау кезінде отладчиктің отладтау сеансы кезінде сілтеме жасалған екілік кескіндермен байланысты таңба файлдарына қатынасы бар екеніне көз жеткізу керек дегенді білдіреді.

Windows ядросының деректер құрылымының ішкі бөліктерін (процестер тізімі, ағын блоктарының тізімі, жүктелген драйверлер тізімі, жадты пайдалану ақпараты және т.б.) тексеру үшін кез келген ядро ​​​​режимін түзету құралын пайдалану үшін сізге дұрыс таңба файлдары қажет және: минимум, ядроның екілік кескіні үшін символдық файл - Ntoskrnl.exe. Таңбалар кестесінің файлдары олар шығарылған екілік кескіннің нұсқасына сәйкес келуі керек. Мысалы, Windows қызмет бумасын немесе ядроны жаңартатын патчтың қандай да бір түрін орнатқан болсаңыз, таңба файлдарын сәйкесінше жаңартуыңыз қажет.

Windows жүйесінің әртүрлі нұсқалары үшін таңбаларды жүктеп алу және орнату оңай, бірақ патчтар үшін таңбаларды жаңарту әрқашан мүмкін емес. Түзетуге арналған таңбалардың қажетті нұсқасын алудың ең оңай жолы – отладчикте көрсетілген таңба жолы үшін арнайы синтаксисті пайдаланып, осы мақсат үшін арнайы әзірленген Microsoft символдық серверіне хабарласу. Мысалы, келесі таңба жолы жөндеу құралдарының таңбаларды онлайн таңба серверінен жүктеп алуына және жергілікті көшірмені c:\symbols:srv*c:\symbols*http://msdl.microsoft.com/download/ ішінде сақтауға себеп болады. символдар

Таңба серверін пайдалану бойынша толық нұсқауларды жөндеу құралдарының анықтамалық файлында немесе 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.

Ескерту: yURPMSHHKFE LPNBODH дампон (8) DMS KHLBBOYS SDTH NEUFB, ZDE OHTsOP UPITBOSFSH BCHBTYKOSHCHE DBNRSCH. rPUME OBUFTPKLY RP LPNBODE свопон (8)ТБДЕМБ РПДЛБҰЛЫ ДПМЦОБ ВШФШ ЧШЧБОБ РТПЗТБНННБ думпон. пВШЮОП ЛФП CHSHRPMOSEPHUS ЪБДБОЙЕН РЕТЕНОООПК думпдев Ч ЖБКМЕ rc.conf (5). еUMY ЪБДБОБ ьФБ 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 қоқыс CH UFTPLE конфигурациясы LPOZHYZHTBGYPOOPZP ZHBKMB CHBYEZP SDTB. fBLPK URPUPV YURPMSHЪPCHBFSH OE TELPNEODHEFUS Y БОЙЫНША DPMTSEO YURPMSHЪPCHBFSHUS, FPMSHLP EUMY CHSCH IPFYFE RPMKHYUBFSH BCHBTYKOSHCH PVTBSCH RBNSFY SDTB, LPFCHBTYBBEPPЪBBCHBCHPTYПЪБ ZTHЪLE.

Ескерту: dBMEE FETNYO gdb PYOBYUBEF PFMBDYUYL gdb , ЪBRHEEOOSCHK CH ``TETSINE PFMBDLY SDTB". RETEIPD CH LFPF TETSIN DPUFYZBEFUS ЪBRHULPN gdb U RBTBNEFTPN -k . h TETSYNE PFMBDLY SDTB gdb YЪNEOSEF UCHPЈ RTYZMBYEOYE ТУРАЛЫ (kgdb) .

Кеңес: eUMY CHSH YURPMSHJHEFE FreeBSD CHETUYY 3 YMY VPMEE TBOOAA, CHCH DPMTSOSCH CHSHRPMOYFSH HUEYEOYE PFMBDPUOPZP SDTB LPNBODPK жолағы, B OE KHUFBOBCHMYCHBFSH VPMSDPUSHYPE:

# cp kernel kernel.debug # strip -g ядросы

bFPF YBZ OE FBL HC Y OEPVIPDYN, OP TELPNEODKHEN. (PH FreeBSD 4-ші VPMEE TEMYYBI LFPF YBZ CHSPRMOSEFUS BCHFPNBFYUEULY CH LPOGE RTPGEUUB RPUFTPEOOYS SDTB жасау.) lPZDB SDTP HUEYEOP, BCHFPNBFYUEULY YMY RT YPNSECHYHB FSH EZP PVSHCHYUOSCHN PVTBBPN, OVTTBCH орнатуды жасайды.

ъBNEFSHFE, YuFP CH UFBTSHCHETUISI FreeBSD (DP 3.1, OE CHLMAYUBS LFPF TEMY), YURPMSHHEFUS SDTB CH ZHTNBFE a.out, RPFPNH YI RBVMYGSH UYNCHPMPCH DPMTSOSCHFB TBNSSOSCHFBTBPSOCHPBFMBFMBFU. 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 UTTHPTCHOPSHNY, ОПНХ ЖОЛГЫПОЙТПЧБОЯ, ЪБЗТХЦБКФЕ ЭЗП ФПМШЛП Ч ПДОПРПМШЪПЧБФЭМШУЛПН ТЕЦЫНЕ РТЫ РПНПЕЙ ЖМБЗБ -с , ХЛБСЧБЕНПЗП РТЫ ЪБЗТХ ЖЛЕ, B ЪBFEN CHSHRPMOYFE FBLYE YBZY:

# fsck -p # mount -a -t ufs # осылайша /var/crash файлдық жүйеңіз жазылады # savecore -N /kernel.panicked /var/crash # exit # ...көп пайдаланушыға

bFB RPUMEDPCHBFEMSHOPUFSH KHLBSCCHBEF RTPZTBNNE savecore (8) 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 YYNTBSHPMSFYYNTBSHPMSFY.

b FERETSH, RPUME UVTPUB BCHBTYKOPZP DBNRB, RETEKDYFE CH LBFBMPZ /sys/compile/НАЙСЫЗ Y ЪBRKHUFYFE LPNBODH gdb -k . yЪ RTPZTBNNSH gdb UDEMBKFE CHPF SFP:

Symbol-file kernel.debug exec-file /var/crash/kernel.0 core-file /var/crash/vmcore.0 Y CHBMS - CHCH NPTSEFE PFMBTSYCHBFSH BCHBTYKOSHK DBNR, YURPMSHЪHS YUIPDOSCH FFELUFBLSCHPBLSCHFE, AT MAVPC DTHZPK RTPZTBNNPK.

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

1: Скрипт 1994 ж. 30 желтоқсан 23:15:22 басталды 2: # cd /sys/compile/URIAH 3: # gdb -k ядросы /var/crash/vmcore.1 4: /usr/src/ ішінен таңба деректерін оқу sys/compile/URIAH/ядро ...орындалды. 5:IdlePTD 1f3000 6: дүрбелең: өйткені сіз айттыңыз! 7:1e3f70-дегі ағымдағы PCB 8: ../../i386/i386/machdep.c үшін таңбалармен оқу... орындалды. 9: (kgdb) мұнда 10:#0 жүктеу (arghowto=256) (../../i386/i386/machdep.c жол 767) 11:#1 0xf0115159 дүрбелеңде () 12:#2 0xf01955bd (өлген) ) (../../i386/i386/machdep.c жолы 698) db_fcall ішіндегі 13:#3 0xf010185e () 14:#4 0xf0101586 db_command (-266509132, -21615 f0101711 db_command_loop () 16:#6 0xf01040a0 in db_trap () 17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723) 18:#1902 trap... f 019ce60 дюйм trap_pfault (...) 20:#10 0xf019cb2f in trap (...) 21:#11 0xf01932a1 ерекшелікте:calltrap () 22:#12 0xf0191503 cnopen (...) 23:#13 2opc301 (спец) 24: #14 0xf012d014 вn_open () 25:#15 0xf012a183 ашық () 26:#16 0xf019d4eb жүйеде (...) 27: (kgdb) жоғары 10 28:.3/6 үшін таңбаларды оқу. /i386 /trap.c...орындалды. 29:#10 0xf019cb2f тұзақта (frame=(tf_es = -260440048, tf_ds = 16, tf_\ 30:edi = 3072, tf_esi = -266445372, tf_eb3 = -026, tf_eb3 = -026, 0396, tf_ebx = - 266427884, tf_edx = 12, tf_ecx = -266427884, tf\ 32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, -272695296, tf_63s =_63f 2664693 68, tf_eflags = 66066, tf_esp = 3072 , tf_\ 34:ss = -266427884)) (../../i386/i386/trap.c 283-жол) 35:283 (жарамсыз) trap_pfault(&frame, FALSE); 36: (kgdb) жақтау жақтауы->tf_ebp жақтау->tf_eip 37: ../../i386/isa/pcvt/pcvt_drv.c үшін таңбаларды оқу... орындалды. 38:#0 0xf01ae729 pcopen (dev=3072, flag=3, mode=8192, p=(struct p\ 39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drvc. 403) 40:403 қайтару ((*linesw.l_open)(dev, tp)); 41: (kgdb) тізім 42:398 43:399 tp->t_state |= TS_CARR_ON; 44:400 tp->t_cflag |= CLOCAL; /* модем бола алмайды (:-) */ 45:401 46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200) 47:403 қайтару ((*linesw.l_open)(dev, tp)); 48:404 #else 49:405 қайтару ((*linesw.l_open)(dev, tp, flag)); 50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */ 51:407 ) 52: (kgdb) басып шығару tp 53: ../../i386/i386/cons.c...орындалды. 54:$1 = (struct tty *) 0x1bae 55: (kgdb) tp->t_line 56 басып шығару:$2 = 1767990816 57: (kgdb) жоғары 58:#1 0xf0191503 cnopen (dev=0x0002 = 0x008), , p=(st\ 59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c 126-жол) 60: қайтару ((*cdevsw.d_open)(dev, жалауша, режим, p) ); 61: (кгдб) жоғары 62:#2 0xf0132c34 spec_open () 63: (kgdb) жоғары 64:#3 0xf012d014 vn_open () 65: (кгдб) жоғары 66:#4 0xf012a186 дюйм ()кгd) ашық жоғары 68:#5 0xf019d4eb жүйе шақыруында (frame=(tf_es = 39, tf_ds = 39, tf_edi =\ 69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_02, tf_7f 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 = 582, tf_62, _ 582 ss = 39)) (. ./../i386/i386/trap.c 673-жол) 73:673 қате = (*callp->sy_call)(p, args, rval); 74: (kgdb) жоғары 75: Бастапқы кадр таңдалды; жоғары көтеріле алмайсың. 76: (kgdb) шығу 77: # exit 78:exit 79: 80: скрипт 1994 ж. 30 желтоқсан 23:18:04 ж. орындалды.

lPNNEOFBTYY L ЧШЧЫЕРТЫЧЕДЕООПНХ ТШТОБМХ:

UFTPLB 6:

ьФП DBNR, CHSFSHCHK RTY RPNPEY DDB (UNPFTY OITSE), RPPFPNH LPNNEOFBTYK L BCHBTYKOPNH PUFBOPCHH YNEEF YNEOOP CHYD ``Сіз айтқаныңыз үшін!'' Y FTBUUYTPCHLB UFELB; PDOBLP YOBYUBMSHOPK RTYYUYOPK RETEIPDB CH DDB VSHMB BCHBTYKOBS PUFBOPCHLB RTY ЧПОЙЛОПЧЕОЯ ПЫЙВЛЫ UFTBOIGSC RBNSFY.

UFTPLB 20:

lFP NEUFPOBIPTSDEOOYE ZHOLGYY trap() CH FTBUUYTPCHLE UFELB.

UFTPLB 36:

rTYOKHDIFEMSHOPE YURPMSHЪPCHBOIE OPChPK ZTBOYGSCH UFELB; FERTSH LFP OE OHTSOP. rTEDRPMBZBEFUS, YuFP ZTBOYGSCH UFELB KHLBSCCHBAF RTBCHYMSHOP TBURPMPTSEOYE ТУРАЛЫ, DBCE CH UMHUBE BCHBTYKOPZP PUFBOPCHB. zMSDS ТУРАЛЫ UFTPLH YUIDOPZP LPDB 403, NPTsOP ULBBFSH, YuFP CHEUSHNB CHETPSFOP, YuFP MYVP CHYOPCHBF DPUFHR RP KHLBBFEMA ``tp"", MYVP VSHM CHSHCHUBYB.

UFTPLB 52:

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

UFTPLB 56:

pDOBLP, PYUECHYDOP, UFP ON KHLBSCCHBEF туралы 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 DPUFBFPEUMPEUYu.)

  • Авторлары:

    Баринов С.С., Шевченко О.Г.

  • Жылы:
  • Дереккөз:

    Информатика және компьютерлік технологиялар / Студенттердің, аспиранттар мен жас ғалымдардың VI халықаралық ғылыми-техникалық конференциясының материалдары – 23-25 ​​қараша 2010 ж., Донецк, ДонҰТУ. - 2010. - 448 б.

аннотация

Microsoft Windows операциялық жүйесіне қатысты пайдаланушы режимі мен ядро ​​режимін жөндеудің салыстырмалы талдауы берілген, соңғысының жөндеуін ұйымдастырудың айырмашылықтары мен мәселелері көрсетілген. Алынған нәтижелер негізінде апаттық және интерактивті жөндеу кезінде ядро ​​режимінің жөндеушілерін құруға қойылатын негізгі талаптар тұжырымдалған. Қолданыстағы шешімдердің талаптарға сәйкестігіне талдау жүргізілді. Атап айтқанда, Microsoft Windows Debugger бағдарламасына ерекше назар аударылады.

Негізгі бөлім

Түзету - бағдарламалық жасақтамадағы қателердің себептерін анықтау және жою процесі. Кейбір жобаларда жөндеу жалпы әзірлеу уақытының 50% алады. Үнемі жетілдіріліп тұратын арнайы құралдарды пайдалану арқылы жөндеуді айтарлықтай жеңілдетуге болады. Мұндай негізгі құрал бағдарламалық қамтамасыз етудің орындалуын бақылауға, оның орындалу барысын бақылауға және оған кедергі келтіруге мүмкіндік беретін отладчик болып табылады. Ядро жөндеу құралдарын негізінен драйвер әзірлеушілері пайдаланады.

Қолданбалы бағдарламалық жасақтаманы әзірлеу құралдары бағдарламашыға кең мүмкіндіктер береді. Кез келген біріктірілген әзірлеу ортасы үшінші тарап утилиталарын пайдаланудың қажетінсіз жөндеу мүмкіндігін қамтиды. Егер біз жүйелік бағдарламалық қамтамасыз ету және драйверлерді әзірлеу туралы айтатын болсақ, онда оның ерекшеліктеріне байланысты әзірлеу процесі өте қиын және аз автоматтандырылған. Барлық даму кезеңдері, соның ішінде отладтау бөлек. Олардың әрқайсысын жүзеге асыру үшін арнайы шарттар қажет: бағдарлама кодын жазу толыққанды компьютерлік жүйеде орындалады, жөндеу отладтау жүйесінде орындалады, жағдайларға байланысты тестілеу жүргізіледі және т.б. Ядро режимінің отладкасының өзін үйрену қиынырақ және сәйкесінше азырақ достық.

Жалпы, ядроны жөндеу құралдарының жоқтығы туралы айтуға болады. Мұндай құралдар бар болғанымен, балама нұсқалар туралы жиі айтылмайды. Мысалы, Microsoft Windows Debugger бағдарламасы өте жоғары кіру шегіне ие. Көптеген бағдарламашылар оны кездестірген кезде бірінші жағымсыз тәжірибе туралы айтады және оның мүмкіндіктерінің көпшілігі талап етілмейді.

Виртуалды мекенжай кеңістігінің құрылымына сүйене отырып, егер қолданба қолданбаға деректерді ерікті жад орнына жазуға себеп болатын қате жіберсе, қолданба тек өзінің жадына зақым келтіреді және басқа қолданбалардың және операциялық жүйенің жұмысына әсер етпейді. . Ядро режиміндегі бағдарлама коды операциялық жүйенің маңызды деректер құрылымдарын зақымдауы мүмкін, бұл сөзсіз жалпы ақауға әкеледі. Тиімсіз жазылған драйвер бүкіл операциялық жүйенің айтарлықтай нашарлауына әкелуі мүмкін.

    Заманауи жөндеушілер келесі негізгі функцияларды қамтамасыз етеді:
  • бастапқы код деңгейінде жөндеу;
  • орындауды басқару;
  • жадты қарау және өзгерту;
  • процессор регистрлерінің мазмұнын қарау және өзгерту;
  • қоңыраулар сағын қарау.

Бөлшектелген кодпен жұмыс істеуді жеңілдету үшін деп аталатын. отладка таңбалары. Байланыстырушы жұмыс істеп тұрған кезде, орындалатын файлдың кескінінен басқа, бағдарламаны орындау кезінде талап етілмейтін, бірақ оны жөндеу кезінде өте пайдалы ақпаратты қамтитын деректер файлын жасауға болады: функциялардың атаулары, глобалдық айнымалылар, сипаттамалар. құрылымдардың. Түзету таңбалары барлық Windows амалдық жүйесінің орындалатын файлдары үшін қол жетімді.

Орындалуды басқару программа кодында көрсетілген пәрменге жеткеннен кейін бағдарлама кодының орындалуын үзу және жалғастыру мүмкіндігін білдіреді. Егер бағдарлама коды қадамдық режимде орындалса, программалау тілінің әрбір таңбалауышы үшін немесе ішкі бағдарламадан шыққан кезде үзіліс орын алады. Еркін орындауда орындау үзілістері кодтың алдын ала анықталған бөлімдерінде – тоқтау нүктелері орнатылған жерлерде орын алады.

Ядро режимінің кодын үзген кезде келесі дилемма туындайды. Түзеткіш бағдарламашымен әрекеттесу үшін пайдаланушы интерфейсін пайдаланады. Анау. кем дегенде отладчиктің көрінетін бөлігі пайдаланушы режимінде жұмыс істейді және оны құру үшін өз кезегінде ядро ​​режимінің модульдеріне сүйенетін қолданбалы бағдарламалау интерфейсін (Windows API) пайдаланады. Осылайша, ядро ​​режимінің кодын кідірту тығырыққа әкелуі мүмкін: жүйе пайдаланушы сұрауларына жауап беруді тоқтатады.

Ядро жадына қол жеткізу үшін отладчиктің бөліктері де ядро ​​режимінде жұмыс істеуі керек. Бұл бірден екі мәселеге әкеледі, бұл процессордың қорғалған режимінде жадты ұйымдастырудың айқын салдары.

Бірінші мәселе виртуалды жады мекенжайларын аударуға қатысты. Драйверлер жадына кіру арқылы пайдаланушы режиміндегі қолданбалармен үнемі өзара әрекеттеседі. Windows операциялық жүйесі виртуалды мекенжайларды ағын контекстінің тұжырымдамасына негізделген физикалық мекенжайларға аударады. Ағынның контексті - бұл ағынның күйін көрсететін құрылым және, атап айтқанда, регистрлер жиынын және кейбір басқа ақпаратты қамтиды. Басқару элементі басқа ағынға тасымалданған кезде контекстік қосқыш пайда болады, ол бір ағын туралы ақпаратты сақтайды және басқа туралы ақпаратты қалпына келтіреді. Ағынның мәтінмәні басқа процестің ағынына ауысқанда, виртуалды мекенжайларды физикалық мекенжайларға аудару үшін пайдаланылатын бет каталогы да ауысады.

Ерекшелігі, жүйелік қоңырауларды жіберу кезінде Windows операциялық жүйесі контекстті ауыстырмайды. Бұл ядро ​​режимінің кодына пайдаланушы режимінің виртуалды мекенжайларын пайдалануға мүмкіндік береді.

Үзілістерді жіберу немесе жүйелік ағындарды орындау кезінде жағдай басқаша. Үзіліс кез келген уақытта орын алуы мүмкін, сондықтан қандай ағын мәтіні пайдаланылатынын болжау мүмкін емес. Жүйе ағындары ешбір процеске жатпайды және пайдаланушы режимінің виртуалды мекенжайларын аудара алмайды. Бұл жағдайда пайдаланушы режимінің жадына кіру мүмкін емес.

Екінші мәселе - ауыстырылатын жадқа қол жеткізу. Жадтағы ақпараттың көпшілігі орнын ауыстырады және кез келген уақытта физикалық жадтан қатты дискіге беттік файлға көшіріледі. Физикалық жадта жоқ бетке қатынасу болса, процессор әдетте жад реттеушісімен өңделетін Бет ақауының үзілуін жасайды, нәтижесінде бет бет файлынан оқылады және физикалық жадқа жүктеледі.

Түзеткіш коды жоғары үзіліс сұрау деңгейлерін (IRQL) пайдалануға мәжбүр болса, бұл әрекет бұзылады. Егер IRQL жад менеджерінің IRQL-іне сәйкес келсе немесе асып кетсе, соңғысы жетіспейтін бетті жүктей алмайды, себебі операциялық жүйе Page Fault үзілуін блоктайды. Бұл операциялық жүйенің бұзылуына әкеледі.

Түзету әдетте интерактивті және төтенше жағдайға бөлінеді. Интерактивті жергілікті жөндеуде отладчик отладчикпен бірдей жүйеде жұмыс істейді. Интерактивті қашықтан жөндеуде отладчик және жөндеу мақсаты әртүрлі жүйелерде жұмыс істейді. Ядро кодын жөндеу кезінде жүйені желі әлі жұмыс істемей тұрған кезде жүктеудің бірінші кезеңдерінен бастап басқару керек, сондықтан жүйелер арасындағы байланыс үшін COM, FireWire, USB сияқты қарапайым сериялық интерфейстер қолданылады. Жақында абстракцияның әртүрлі деңгейлерінде бағдарламалық жасақтаманы виртуализациялаудың даму тенденцияларының арқасында виртуалды машиналар жиі қолданылуда. Қонақ ОЖ отладка ОЖ ретінде әрекет етеді, орналастырылған ОЖ отладчик пайдаланушы интерфейсін қамтиды.

Сондықтан төтенше жағдайды түзету үшін сынақ компьютерінде жөндеу құралының орнатылуын талап етпейді. Windows операциялық жүйесінің дистрибуциясы төтенше жағдайды түзетуді жүзеге асыру механизмдерін қамтиды. Қайта жүктеу алдында операциялық жүйе оның күйі туралы ақпаратты сақтай алады, оны әзірлеуші ​​талдап, себебін біле алады. Файлға сақталған мұндай ақпарат жад демпі деп аталады.

Негізгі ядро ​​режимін түзету құралдарын Windows операциялық жүйесінің өндірушісі Windows үшін еркін таратылған Debugging Tools бумасының бөлігі ретінде қамтамасыз етеді. Құралдарға сәйкесінше WinDbg және KD графикалық және консольдық жөндеушілер (бұдан әрі - Windows Debugger) кіреді. Бұл отладчиктердің жұмысы операциялық жүйені әзірлеушілер ұсынған және оның ядросына енгізілген механизмдерге негізделген.

Windows Debugger үшін негізгі режим пәрменді интерпретатор режимі болып табылады. Модульдік құрылымына байланысты Windows Debugger әзірлеуші ​​қамтамасыз ететін пәрмендерге қосымша кеңейтімдер деп аталатын үшінші тарап модульдерін қолдайды. Шындығында, кірістірілген пәрмендердің көпшілігі кеңейтімдер ретінде де жинақталған.

Windows Debugger қашықтағы интерактивті және төтенше жағдайды түзетуге бағытталған, ол пайдаланылған кезде оның барлық мүмкіндіктерін ашады. Бұл ретте толық жергілікті интерактивті жөндеуге қолдау көрсетілмейді: отладчик тек кейбір ядро ​​құрылымдарын көруге мүмкіндік береді.

Windows Debugger үшін Марк Руссинович жасаған LiveKD деп аталатын кеңейтім модулі бар, ол белгілі бір мағынада жергілікті интерактивті жөндеуді жүзеге асырады. LiveKD жұмыс жүйесінің жад демпін жылдам жасайды және оны жөндеу үшін пайдаланады.

Windows жүйесіне арналған Debugging Tools бумасы жүйелі түрде жаңартылып отырады және барлық заманауи Windows операциялық жүйелеріне қолдау көрсетеді.

DriverStudio бағдарламалық пакетінде Compuware шығарған SoftICE ядросының жөндеу құралы дәстүрлі түрде Windows жүйесіне арналған отладтау құралдары бумасына балама болды. SoftICE-тің айрықша ерекшелігі қолдау көрсетілетін аппараттық құралда жергілікті интерактивті жөндеуді жүзеге асыру болды. Түзеткіш операциялық жүйенің жұмысын толығымен дерлік басқара алады.

2006 жылғы 3 сәуірдегі жағдай бойынша DriverStudio өнімдер тобының сатылымы «әртүрлі техникалық және іскерлік мәселелерге, сондай-ақ жалпы нарықтық жағдайларға» байланысты тоқтатылды. Қолдау көрсетілетін амалдық жүйенің соңғы нұсқасы Windows XP Service Pack 2 болып табылады. Әдетте, қызмет бумалары амалдық жүйенің қолданба интерфейсін өзгертпейді, бірақ жүйенің қоңырау нөмірлері және басқа құжатталмаған ақпарат өзгеруі мүмкін. SoftICE жөндеу құралы ішкі деректер құрылымдарының қатты кодталған мекенжайларына сүйенді. Нәтижесінде 3 Service Pack шығарылымымен үйлесімділік бұзылды. Windows амалдық жүйесінің кейінгі нұсқаларына да қолдау көрсетілмейтіні анық.

Syser Kernel Debugger шағын қытайлық Sysersoft компаниясымен SoftICE отладчикінің орнына жасалған. Алғашқы соңғы нұсқасы 2007 жылы шығарылды. SoftICE сияқты, Syser Kernel Debugger жұмыс істеп тұрған жүйеде интерактивті жөндеуге қабілетті. Windows жүйесінің заманауи нұсқаларының тек 32 биттік басылымдарына қолдау көрсетіледі.

Қазіргі уақытта Windows Debugger ядро ​​модулін жасаушылардың негізгі құралы болып табылады. Оны Windows операциялық жүйесінің ядро ​​командасы да пайдаланады.

Кейде менде Windows ядроның отладкасының жүктелу уақытын күтетін жағдай болады. Сіз логотипті емес, «Windows іске қосу» мәтінін көресіз.

Түзету құралын қазір тіркесем, Windows 7 логотипі анимациясы ойнатылады, содан кейін логотип импульсті бастайды. Бұл кезде жүктеп алу процесі бұдан былай орындалмайды. CPU жүктемесі минимумға дейін азаяды. Мен әдетте бірнеше минут күтемін, бірақ ештеңе болмайды.

Бұл әрқашан бола бермейді. Дегенмен, бұл орын алса, VM қалпына келтіру көмектеспейді. Бұл мәселені шешу үшін мен іске қосуды жөндеуді пайдалануым керек. Өкінішке орай, бұл мәңгілікке созылады.

Іске қосу жөндеуді іске қосудан басқа не істей алатыным туралы қандай да бір идеялар бар ма?

Алдын ала рахмет!

3

2 жауап

Сізде кездесетін мәселені шешу үшін жүктеу кезінде F10 пернесін басыңыз. Ал жою/отладтау және қатысты параметрлер. Содан кейін enter пернесін басыңыз.

Ұсыныс: әдепкі жүктеу мәзірінің опциясы үшін /debug қолданбаңыз. Жүктеу конфигурациясын жаңа жазбаға көшіріңіз. Содан кейін оны жөндеу режиміне орнатыңыз. Windows түзеткішті қашан пайдаланатыныңызды білмейді. Сондықтан ол күту керек.