Debug, depanare, axele de bază ferestre

Debug, depanare, nucleu SO Windows

Debug, depanare, axele de bază ferestre

Deci, să presupunem că ne-am dorit să se uite în interiorul kernel-ul pentru Windows, a se vedea cum funcționează. Sau să presupunem că am scris driver de dispozitivul nostru, și nu funcționează sau nu funcționează corect. Ai nevoie să se uite la depanatorul kernel ce se întâmplă.

În primul rând, trebuie să pregătească un „mediu“ pentru depanare.
2 va avea nevoie de un computer care rulează Windows: primul computer - este cel care va fi supus depanare, al doilea computer - este cel cu care se va desfășura depanare. Microsoft se referă la primul calculator numit ținta. iar al doilea - o gazdă.

Aceste două computere trebuie să se conecteze între ele, pentru a transmite informațiile de depanare. Există mai multe moduri:

Aici este locul meu de lucru pentru depanare:

Debug, depanare, axele de bază ferestre

Stânga - țintă. inspectat calculatorul.
Dreapta - gazdă. laptop debugger.

Laptop-ul este conectat la cablul USB și MBFTDI programator. În acest caz, vom folosi pur și simplu ca adaptor USB2COM. Asta este, pentru un laptop este ca un port serial. Cu toate acestea, există o nuanță - nivelurile de ieșire ale programării MBFTDI nu corespund portul serial standard de. De aceea, am conectat MAX232 convertor de nivel, on-chip (găsit printre piese vechi de fier, trebuie să avem o cutie în birou).

Acum trebuie să configurați ținta. Aici am Windows 7 pe 64 de biți.
Porniți fereastra CMD linia de comandă ca administrator și se execută comanda:

> Bcdedit / debug pe
> Bcdedit / dbgsettings debugport serial: n BAUDRATE: rata

I debugport: COM1 și ratabaud: 115200
Aceasta este, în general întreaga configurație a computerului inspectat.
Acum trebuie doar să reporniți.

Pe laptop-ul meu ca Windows 7 x64. Am instalat WDK și există o parte din mine are debugger dreapta.

Am alerga WindDbg. Selectați File element de meniu -> apare Kernel Debug și o fereastră:

Debug, depanare, axele de bază ferestre

Opta pentru o rată de transfer de 115200 și un port serial. În principiu, totul este gata.

Gazdă pe un laptop în program au WinDbg Shell, dostapnaya prin intermediul meniului View -> Comandă. Există o linie de comandă debugger.

Orice înaltă tehnologie pentru observator de puțin distins de magie ..

Gazda în WinDbg programul apăsați pe Ctrl + Break și țintă calculatorul se oprește! Aceasta este în valoare complet toate procesele și fire Windows. Puteți bea ceai.

Consola debugger, puteți efectua o varietate de comenzi. Comenzi mult, ei au o mulțime de opțiuni, desigur, eu nu le pot descrie. În final, pentru acest lucru este destul de sane-ghid ajuta programul WinDbg.

Cele mai multe comenzi simple:

> r - prezintă conținutul registrelor CPU.

> T - un singur procesor pentru a executa instrucțiuni.

> P - executa instrucțiuni procesor sau întreaga procedură, în cazul în care apelul de instrucțiuni.

Mai mult decât atât, în debugger Desigur, puteți seta puncte de întrerupere de diferite tipuri.

Cel mai simplu exemplu:

Totuși, este posibil să se stabilească un punct de întrerupere privind înregistrarea sau citirea locații de memorie prestabilite de intrare sau de ieșire port.

Pentru a anula toate punctele de întrerupere - echipa «bc *»

Trebuie, de asemenea, a spus despre informația simbolică.
Desigur, ia în considerare goale codul plăcerii de asamblare nu este foarte plăcut. Trebuie să conectați mai multe informații de depanare.

De exemplu, am scris driver-ul de Windows. Compilat versiunea sa de depanare. Împreună cu compilator driverul de fișier mydrv.sys generează o imagine statică corespunzătoare mydrv.pdb informații de caractere.

Peste cap de la meniul File debugger -> Cale Simbol fișiere. și în caseta de dialog pentru a adăuga calea către fișierul nostru PPB.

> Bp mydrv DriverEntry -! Oprește kernel-ul, atunci când va exista un apel de funcție DriverEntry șoferul nostru mydrv.

În plus, este foarte util să se conecteze la debugger, de asemenea, informația simbolică a kernel-ului Windows. Desigur, multe versiuni windose, există diferite construi și în cazul în care pentru a găsi informațiile simbol este potrivit pentru dvs. țintă sistem de operare Windows?

Cel mai simplu mod de a îndeplini linia de comandă debugger

În acest caz, fișierele de depanare dorit (aceasta este versiunea corectă) va fi pompat prin Internet pe disc în folderul c: \ localsymbols direct de pe serverul Microsoft.

Acum, puteți avea un mod mai semnificativ pentru a depana kernel-ul în sine.

Vrei să vezi cum arată, de exemplu, conducătorul auto funcția Usbport.sys USBPORTSVC_CompleteIsoTransfer. Nici o problemă:

Debug, depanare, axele de bază ferestre

Puteți seta un punct de întrerupere și apoi instrucțiuni pas cu pas pentru a efectua toate. Informațiile simbol ajută la înțelegerea în cazul în care nu detaliile, cel puțin în sensul general al codului executabil al unui alt conducător auto.

De exemplu, multe structuri de date de sistem în kernel-ul Windows sunt livrate cu „semnătură“ - o linie specială, de obicei, de la 4 caractere. Astfel, funcțiile de bază sunt capacitatea de a verifica cu ușurință pentru a le trimite indicii la structuri sunt adevărate sau nu. Aici este codul din cele de mai sus au un apel de funcție Kartik USBPORT_AssertSig. Chiar și funcția de nume devine clar despre ce face - a verifica indicele, dacă acesta arată într-adevăr într-o structură cu semnătura dorită.

Încă un lucru. Când se apelează funcțiile de nucleu Windows sunt, de obicei primele patru parametrii funcțiilor sunt transferate la registrele RCX. RDX. R8 și R9. Se pare că ceilalți parametri, dacă mai mult de patru, a trecut la funcțiile pe stivă.

În general, WinDbg debugger oferă oportunități ample pentru a depana șoferii lor, precum și posibilitatea de a explora toate kernel-ul Windows.