Protecție la depanare

SoftIce este un program de depanare universal care poate analiza și depana orice cod, inclusiv rutine de întrerupere și drivere I / O. SoftIce este alcătuit dintr-un program de depanare a modului kernel (de fapt un debugger) și un încărcător de depanare (Symbol Loader). Instrumentul Loader Symbol (SL) încarcă informații de depanare pentru modulul dvs., vă permite să personalizați SoftIce și vă permite să scrieți comenzi de istoric într-un fișier.







Caracteristici SoftIce:
  • Depistarea simbolică a aplicațiilor pe 32 de biți, depanarea driverelor de dispozitiv pentru WIN NT, drivere pentru WIN95, VxD, programe pe 16 biți pentru DOS și Windows.
  • Debughează aproape orice cod, inclusiv rutine de întrerupere și rutine interne WIN 95 și WIN NT.
  • Setarea punctelor de întrerupere în operațiile de citire / scriere din memorie, citirea / scrierea porturilor I / O și întreruperi.
  • Setați puncte de întrerupere pentru mesajele Windows.
  • Setați punctele de declanșare declanșate în anumite condiții (puncte de întrerupere condiționate) și acțiunile care ar trebui să apară atunci când se declanșează un punct de întrerupere.

SL utilitar vă permite să citiți informațiile de depanare din programele depanat (EXE, DLL, VxD, 386, OCX) și încărcați-l în debugger, rulați aplicația dvs. și setați automat un punct de întrerupere pe punctul de intrare al programului, scris în fișierul jurnal de depanare.

Pachetul SoftIce include un exemplu de GdiDemo.

1. Încărcarea programului de depanare

  • Porniți SL.
  • Selectați opțiunea Modul deschis din meniul Fișier.
  • Deschideți Gdidemo.exe.
  • Selectați opțiunea Încărcare din meniul Modul.

SL va difuza .NMS informații de depanare în fișierul, descărcați fișierele sursă, executați programul fiind depanate (în acest caz, Gdidemo) și apar în SoftIce, în cazul în care veți vedea codul sursă.

Numărul de linie evidențiat 35 este punctul de intrare la programul dvs. Dacă SL afișează mesajul "A apărut o eroare în timpul traducerii / încărcării simbolului", atunci nu există informații de depanare în fișierul de depanare, faceți clic pe OK și vă bucurați de asamblarea [diz].

2. Gestionarea SoftIce

Dacă totul se face corect, atunci ar trebui să vedeți diviziunea SoftIce în mai multe ferestre. Fereastra superioară - fereastra de înregistrare (fereastra registrelor) - arată starea registrelor de lucru ale procesorului. Mai jos este fereastra de date, în care puteți vizualiza sau edita memoria de memorie. Mai jos este fereastra de cod - conține codul sursă al programului (dacă ați descărcat informațiile de depanare) sau codul dezasamblat al programului. În partea de jos este fereastra de comandă - Fereastră de comandă, în care puteți introduce o comandă și puteți vedea rezultatul execuției. Linia cea mai de jos este linia de ajutor, în care, atunci când tastați, opțiunile posibile pentru comenzi și sintaxa lor sunt evidențiate. Cel mai convenabil mod de a gestiona SoftIce cu mouse-ul.

Resize - pentru a muta cursorul la marginea inferioara a ferestrei la care doriți să redimensionați sau închide, faceți clic pe butonul stâng al mouse-ului și trageți-l în jos (creșterea în mărime) sau în jos (reduce), dacă doriți să închideți fereastra, mutați limita inferioară a feței, în fereastră va apărea fereastra "Închide fereastra curentă", iar fereastra va dispărea.
Notă: Nu puteți modifica dimensiunea ferestrei de înregistrare și FPU.

Scrolling o linie - muta cursorul la săgeata mică, situată la granițele fereastra pe care doriți să defilați și faceți clic pe butonul din stânga al mouse-ului (săgețile apar, în cazul în care dimensiunea ferestrei este mai mare sau egală cu două linii).

Scrolling ecranul - muta cursorul la marea săgețile situate în interiorul ferestrei pe care doriți să defilați și faceți clic pe butonul din stânga al mouse-ului (apar săgețile, în cazul în care dimensiunea ferestrei este mai mare sau egal cu patru linii).

Modificarea valorilor registrului - muta cursorul la registru, valoarea pe care doriți să o modificați, apăsați butonul stâng al mouse-ului și introduceți numărul, în cazul în care aveți nevoie pentru a schimba o singură cifră, atunci nu cursorul la acest număr și schimbare.

Modificarea valorii steagului - pentru a muta cursorul la pavilion pe care doriți să o modificați, apăsați pe butonul stâng al mouse-ului, apoi apăsând Ins, puteți modifica valoarea de pavilion la opusă (literă mică înseamnă că pavilion nu este setat, set de mare).

Modificarea valorilor celulelor de memorie - muta cursorul la octet (cuvânt, cuvânt dublu, etc) pe care doriți să o modificați, apăsați butonul stâng al mouse-ului și introduceți valoarea, dacă doriți să modificați una sau mai multe cifre în numărul, apoi mutați cursorul folosind tastatură la numerele dorite și schimbare.
Notă: în toate cazurile de modificare a valorilor, acestea intră în vigoare după trecerea la orice altă fereastră, înainte de care puteți anula ultima modificare apăsând Esc.

Setarea punctelor de întrerupere pentru execuție - mutați cursorul pe linia din fereastra de cod unde doriți să opriți și faceți dublu clic pe butonul stâng al mouse-ului pentru a pune un punct de pauză, linia va fi evidențiată.

Eliminarea variabilelor din fereastra de urmărire - plasați cursorul pe variabila pe care doriți să o ștergeți, apăsați butonul stâng al mouse-ului, variabila este evidențiată, apăsați butonul Del - variabila va dispărea.

3. Urmăriți programul

Utilizați comanda T (urme) pentru a ottrassirovat o cheie echipă sau F8, care este atașat la comanda implicită pentru T. comanda Vor fi localizate în linia curentă și cursorul se mută la linia următoare și subliniază-l. Acesta este șirul:

Apăsați din nou tasta F8, cursorul se va muta la următoarea linie:

Apăsați din nou pe F8 și veți merge la linie

Pentru a depana programul, folosiți comanda T, care este executată de un operator al programului sursă sau de o comandă a unei mașini.

Există, de asemenea, o comandă P sau tasta F10, care efectuează un pas în program. la urmărirea unei funcții sau a unei întreruperi, nu veți obține control până când execuția funcției nu este finalizată și veți reveni din funcție. Comanda P este utilă atunci când depanați algoritmul principal și este distras de trasarea fiecărei proceduri irațional.






Notă: Cu ajutorul comenzii T, nu puteți căuta apeluri de sistem (apeluri API WIN32) în modul sursă, trebuie să mergeți la modul mixat sau cod pentru a le urmări.

Fereastra Locale afișează cadrul curent al stivei. În cazul nostru, conține variabile locale pentru funcția WinMain.

Utilizați comanda T pentru a intra în funcția RegisterAppClass, fereastra Locale Window va fi goală, deoarece variabilele locale nu sunt definite pentru această funcție. Funcția RegisterAppClass este localizată în fișierul INIT.C. SoftIce afișează fișierul curent în colțul din stânga sus al ferestrei Cod

Din nou, tastați T, fereastra Locale va conține parametrul transmis funcției RegisterAppClass (hInstance) și structura locală wndClass. Înainte de structură există un semn plus, ceea ce înseamnă că în interiorul acestuia există variabile pe care le puteți vedea (puteți, de asemenea, să vă uitați la variabilele de șir și la matrice). Puteți vizualiza structura făcând dublu clic pe mouse. Semnul + se schimbă la - și veți vedea variabilele care alcătuiesc structura. De asemenea, puteți închide structura făcând dublu clic pe mouse.

5. Setarea punctelor de întrerupere pentru execuție

Punctele de blocare pentru execuție sunt împărțite în două tipuri: puncte limită și puncte punctuale.

Puncte de întrerupere unice

Du-te la fereastra de cod, folosind tasta PgDn pentru a muta cursorul pe linia cu numărul 61 (același lucru se poate face folosind comanda U 0.61), în această linie să fie primul apel funcția Win32 API RegisterClass. Folosind comanda AERE (tasta F7), rulați programul pe această linie.

Linia curentă din programul debugged a fost linia: Notă: același rezultat ar putea fi obținut cu comanda G .61 (executați programul înainte de linia 61).

Puncte comune de întrerupere

Următorii pași demonstrează utilizarea punctelor de întrerupere normale, adică Cei care vor lucra până când le veți anula. Găsiți următoarele RegisterClass de apel, care se află în linia 74. Plasați cursorul pe această linie și introduceți comanda BPX (breakpoint executabilă), sau apăsați F9 (această comandă, în memoria de la locul de amplasare a comenzii de sub cursor este înregistrată echipa INT3, dar nu se poate vedea. line ar trebui să fie evidențiate. pentru a elimina un punct de întrerupere, puteți re-intrare aceeași echipă. Dacă ești suficient de norocos să dețină procesor Pentium, instalarea și îndepărtarea breakpoints se reduce la dublu click pe acea echipa, în cazul în care doriți să setați un punct de întrerupere. După ce gura breakpoints anovki rula programul atunci când programul va executa instructiuni INT3, trece de control SoftIce G sau X (tasta F5) de comandă, atunci el va apărea înainte de a vedea informații despre punctele de inflexiune instalate pot BL (breakpoint List) de comandă ..:

Deoarece următoarea urmărire pas cu pas a funcției RegisterAppClass nu are sens pentru noi, revenim la locul din care a fost numită această funcție. Pentru aceasta, există o comandă P cu parametrul RET (tasta F12). Acesta vă permite să rulați programul până când se întâlnește o comandă RET (RETF), după ce a executat această comandă SoftIce de rutine și de ședere pe linia care urmează apelul la rutina. În ceea ce privește programul nostru: funcția RegisterAppClass este apelată din funcția WinMain, SoftIce se oprește în funcția WinMain de pe linia următoare apelului la funcția RegisterAppClass, adică linia va fi evidențiată:

Utilizați echipa BC (Breakpoint Clear), cu numărul de puncte de întrerupere pe care ați urmărit cu BL comandă, pentru că s-ar elimina acest punct de întrerupere special, sau în loc de numărul, tipul *, atunci va lua toate punctele de întrerupere (puteți introduce numărul de puncte de întrerupere prin virgulă dacă doriți să eliminați mai multe puncte).

6. Utilizarea comenzilor de informare

SoftIce are la dispoziție multe comenzi diferite, cu ajutorul cărora puteți afla starea și obține alte informații despre sistemul de operare și aplicațiile care rulează în acesta. Vom lua în considerare doar două comenzi: H (Help) și CLASS. Aceste comenzi afișează o mulțime de informații în fereastra de comandă, deci este de dorit să mărim dimensiunea acestei ferestre, pentru aceasta închidem fereastra variabilelor locale (Window Locale).

Pentru comanda H, puteți obține ajutor pentru toate comenzile SoftIce sau informații mai detaliate despre o comandă specifică dacă introduceți numele acesteia ca argument de comandă H:

Prima linie oferă o descriere a comenzii, a doua prezintă informații despre sintaxa și argumentele care pot fi folosite în comandă, a treia linie conține un exemplu de utilizare a comenzii.

Scopul funcției RegisterAppClass este de a înregistra un șablon pentru clasele de ferestre care vor fi utilizate de aplicația GdiDemo pentru a crea ferestre. Utilizând comanda CLASS, puteți vedea clase înregistrate pentru GdiDemo:

7. Nume simbolice

Când încărcați o aplicație cu informații de depanare, SoftIce creează automat o tabelă de simboluri care conține toate denumirile definite în această aplicație. Folosind comanda TABLE, puteți vedea care nume de tabele ale simbolurilor sunt încărcate în prezent:

Tabelul de simboluri utilizat în acest moment este evidențiat în culori. În cazul în care tabela de simboluri curent nu se potrivește cu cea care se face referire de aplicația dvs., apoi folosind comanda TABLE cu numele aplicației ca argument, sunteți conectat la masa corectă (în cazul în care masa este creat pentru aplicația dvs.):

Folosind comanda SYM, puteți vizualiza toate numele simbolice definite în tabelul curent (afișat pe ecran a segmentului în cadrul acestora, în ordine alfabetică). Dacă sunteți interesat de anumite nume specifice, utilizați șabloanele:

8. Puncte de rupere condiționate

Setarea unui punct de întrerupere pentru funcția LockWindowInfo.

Cu ajutorul comenzii BPX LockWindowInfo, puneți o pauză în execuția acestei funcții. De fiecare dată când unul dintre ferestrele din GDIDEMO aplicației va trebui să vă actualizați informațiile, programul va fi numit funcția LockWindowInfo, din moment ce această funcție a seta punctul de întrerupere, acesta va fi numit SoftIce. Utilizați comanda BL pentru a verifica dacă a fost setat un punct de întrerupere. Rulați aplicația cu comanda X sau G. De îndată ce se va apela funcția LockWindowInfo, se va afișa SoftIce. Deoarece actualizarea se întâmplă în mod constant, SoftIce este numit în mod constant, ceea ce este foarte incomod dacă suntem interesați să actualizăm o anumită fereastră. Pentru a intercepta un apel pentru a actualiza o anumită fereastră, de exemplu, POLYDEMO, folosim un punct de întrerupere condiționat. Din textul original al programului (fișierul wininfo.c) care funcția LockWindowInfo primește ca argument de intrare a unui parametru HWND (fereastra mâner) - mâner fereastră și se întoarce la funcția de apelare o singură valoare - un pointer la variabila pentru fereastra dată. Adică, dacă am declanșat un punct de întrerupere numai pe mânerul ferestrei POLYDEMO, ne-am fi atins scopul. În primul rând, trebuie să cunoaștem mânerul ferestrei noastre, pentru aceasta folosim comanda:

Acum, când știm unde și ce ne este transmis în funcție, putem stabili un punct de prescripție condiționat. Pentru a face acest lucru, solicităm editarea punctului de întrerupere al funcției LockWindowInfo:

Următorul rând apare în linia de jos a ferestrei de comandă:

iar cursorul este poziționat la capătul liniei. Acum puteți modifica punctul de întrerupere la discreția dvs., la sfârșitul liniei adăugați următoarea condiție: și apăsați Enter.

Punctul de întrerupere va arăta astfel:

Dezactivați punctul de întrerupere 0 cu comanda BD (Breakpoint Disable):

Spre deosebire de comanda BC, care elimină un punct de întrerupere, comanda BD dezactivează temporar punctul, adică Acesta nu va declanșa foc, dar puteți să-l activați în orice moment cu comanda BE (Breakpoint Enable). Punctele de întrerupere dezactivate sunt indicate printr-un asterisc de lângă numărul de serie al punctelor de întrerupere.

Start SoftIce echipe X sau G, atunci când fereastra POLYDEMO încearcă să acceseze prima copie cuvânt dublu a ferestrei de date, breakpoint este declanșat și SoftIce apare, va avea loc în funcțiile și PolyRedraw PolyDrawBez. Aceste funcții accesează câmpul nBezTotal, care este zero compensat în datele de instanță ale ferestrei POLYDEMO. Valoarea acestui câmp specifică numărul de curbe afișate simultan în fereastra POLYDEMO.

Notă: Datorită particularităților arhitecturii procesoarelor Intel, interceptarea accesului la celula de memorie va apărea după executarea instrucțiunii referitoare la memorie, adică SoftIce se oprește la următoarea echipă.

Resetați toate punctele de întrerupere cu comanda BC * și ieșiți din SoftIce.

Cum se face munca SoftIce?

Config.Sys: Device = c: \. \. \ S-Ice.Exe
Atunci conduce Ldr.Exe. MS-DOS are un mic bug: stabilește incorect valoarea registrului SP - reduce valoarea acestuia cu 2, iar unele protecții care utilizează în mod activ stiva determină sarcina să se blocheze. Acesta este tratat prin editarea codului MS-DOS la încărcarea INT 21h AX = 4B01h sau prin comanda "R SP = SP + 2"

Cum se face munca SoftIce / Win / W95?

Editați fișierul WINICE.DAT, activați depanatorul pentru a încărca informații despre simboluri din sistemul DLL al sistemului. (În WinICE.DAT există linkuri către USER.EXE, KRNL386.EXE, WIN386.EXE)







Articole similare

Trimiteți-le prietenilor: