Debugger védelem
A SoftIce egy univerzális hibakereső, amely képes elemezni és hibakeresni minden kódot, beleértve a megszakítási rutinokat és az I / O meghajtókat. A SoftIce egy kernel módú hibakeresõ (valójában egy hibakeresõ) és egy hibakeresõ betöltõ (Symbol Loader). A Symbol Loader (SL) segédprogram betölti a modul hibakeresési adatait, lehetővé teszi a SoftIce testreszabását, és lehetővé teszi a parancsok parancsfájlok írását.
A SoftIce funkciói:- 32 bites alkalmazások szimbolikus hibakeresése, WIN NT illesztőprogramok hibakeresése, WIN95, VxD illesztőprogramok, 16 bites programok DOS és Windows rendszerhez.
- Gyakorlatilag minden kód hibakeresése, beleértve a megszakítási rutinokat és a WIN 95 és WIN NT belső rutinokat.
- Bontási pontok beállítása a memóriában lévő olvasási / írási műveletekhez, olvasási / írási I / O portok és megszakítások.
- Állítsa be a töréspontokat a Windows üzenetek között.
- Állítsa be az adott körülmények között bekövetkező szakadási pontokat (feltételes töréspontok) és az esetleges lépéseket, amikor töréspont keletkezik.
SL segédprogram lehetővé teszi, hogy olvassa el a hibakeresési információkat a hibakeresés programok (EXE, DLL, Vxd, 386, OKX), és töltse be a debugger, futtatni az alkalmazást, és automatikusan beállítja a töréspontot a belépési pont a program írt a debug log fájlt.
A SoftIce csomag tartalmaz egy példát a GdiDemo-ra.
1. A hibakereső program betöltése
- Indítsa el az SL-t.
- Válassza a Megnyitás modul opciót a Fájl menüből.
- Nyissa meg a Gdidemo.exe programot.
- Válassza a Load opciót a Modul menüből.
SL fog sugározni .NMS javítási információkat a fájlt, töltse le a forrás fájlokat, futtatni a programot hibakeresést (ebben az esetben Gdidemo), és kialakulni SoftIce, ahol látni fogja a forráskódot.
A kiemelt 35 vonal a program belépési pontja. Ha SL üzenetet hozott, mint a „Hiba a szimbólum fordítás / teher”, azt jelenti, a hibakeresés fájl hiányzik a hibakeresési információkat, kattintson az OK gombra, és élvezze az [dis] szerelő.
2. A SoftIce kezelése
Ha minden rendben van, akkor a SoftIce-t több ablakra kell osztani. A felső ablak - Regisztrációs ablak (regiszter ablak) - a processzor munkarendjeinek állapotát mutatja. Az alábbiakban az Adatablak, amelyben megtekintheti vagy módosíthatja a memóriaképet. Az alábbiakban a Kód ablak - tartalmazza a program forráskódját (ha betöltötte a hibakeresési információt) vagy a program szétszerelt kódját. A legördül a parancs ablak - Parancsablak, amelyben megadhat egy parancsot, és megtekintheti a végrehajtás eredményét. A legalacsonyabb vonal a segélyvonal, amelyben a beíráskor a parancsok és a szintaxis lehetséges opciói jelennek meg. A SoftIce legfontosabb kezelési módja az egérrel.
Átméretezés -, hogy a kurzort az alsó határ az ablak, amely szeretné méretezni, vagy zárja be, kattintson a bal egérgombot, és húzza le (méretének növekedése) vagy lefelé (csökkenti), ha azt szeretné, hogy bezárja az ablakot, mozgassa az alsó határ a felső, az ablakban megjelenik a Bezárás aktuális ablak, és az ablak eltűnik.
Megjegyzés: A regiszterablak és az FPU méretét nem lehet megváltoztatni.
Görgetés egy vonalhoz - mozgassa a kurzort a gördítendő ablak határain levő kis nyílra, és kattintson a bal egérgombbal (a nyilak akkor jelennek meg, ha az ablak mérete több vagy egyenlő a két sorral).
Görgetés a képernyőre - mozgassa a kurzort az ablak belsejében található nagy nyílra, amelyet görgetni szeretne, és kattintson a bal egérgombbal (a nyilak akkor jelennek meg, ha az ablak mérete négy vonalnál nagyobb vagy egyenlő).
Változó regiszter értékek - vigye a kurzort a nyilvántartás, az érték meg akarja változtatni, nyomja meg a bal egérgombot, és adja meg a számot, ha meg kell változtatni egy számjegy, akkor nem a kurzort ezt a számot és a változás.
Változó értéke a zászló - mozgatni a kurzort a zászló meg akarja változtatni, nyomja meg a bal egérgombot, majd nyomja Ins, akkor a változó értéke a zászló a szemközti (kis betű azt jelenti, hogy a jelző nincs beállítva, nagy készlet).
Az értékek módosítása a memória sejtek - vigye a kurzort a byte (szó, dupla szavas, stb) meg akarja változtatni, nyomja meg a bal egérgombot, és adja meg az értéket, ha meg akarja változtatni egy vagy több számjegy a számot, majd mozgassa a kurzort a billentyűzet, hogy illeszkedjen beleértve engem is.
Megjegyzés: az értékek megváltoztatásakor minden esetben hatással lesz más ablakra váltás után, mielőtt az Esc gombbal megszakíthatja az utolsó változást.
Beállítás töréspontot kivitelezés - mozgatni a kurzort a sort a kód ablak, ahol meg szeretne állni, és duplán kattintva a bal egérgombbal, tegyen egy töréspont vonal jelzi.
Változók eltávolítása a Figyelő ablakból - helyezze a kurzort a törölni kívánt változóra, nyomja meg a bal egérgombot, a változó kiemelve, nyomja meg a Del gombot - a változó eltűnik.
3. Keresse meg a programot
Használja a T (nyomkövetési) parancsot egy parancs nyomon követéséhez, vagy az F8 billentyűhöz, amelyet alapértelmezésben a T paranccsal rendelt el. Az aktuális sorban lévő parancs végrehajtódik, és a kurzor a következő sorra ugrik, és kijelöli azt. Ez a karakterlánc:
Nyomja meg újra az F8 billentyűt, a kurzor a következő sorra ugrik:
Nyomja meg újra az F8 billentyűt, és a sorhoz lép
A program hibakereséséhez a T parancsot használja, amelyet a forrás program egy operátor vagy egy gép parancs hajt végre.
Van egy P parancs vagy egy F10 billentyű, amely egy lépést hajt végre a programban. ha egy függvény vagy egy megszakítás nyomon követése közben nem kap vezérlést addig, amíg a függvény végrehajtása befejeződik, és visszatér a funkcióból. Kényelmes a P parancs használata abban az esetben, ha a fő algoritmus hibakeresése és eltorzítása az egyes eljárások nyomon követése irracionális.
Megjegyzés: A T paranccsal a rendszerhívások (WIN32 API hívások) nem vezethetők be forrás módban, vegye fel a vegyes vagy kódolási módot a nyomon követéshez.
A Helyek ablak mutatja a verem aktuális keretét. Esetünkben helyi változókat tartalmaz a WinMain függvény számára.
A T parancs használatával lépjen be a RegisterAppClass függvénybe, a Helyi ablak ablak üres lesz, mivel a helyi változók nincsenek definiálva ehhez a funkcióhoz. A RegisterAppClass funkció az INIT.C fájlban található. A SoftIce az aktuális fájlt mutatja a kódablak bal felső sarkában
Írja be ismét a T típust, a Locals ablak tartalmazza a RegisterAppClass (hInstance) függvény és a helyi wndClass struktúra paramétereit. A struktúra előtt van egy pluszjel, ami azt jelenti, hogy benne vannak változók, amelyeket láthatsz (meg lehet nézni a karakterláncváltozókat és tömböket is). A szerkezet megtekintéséhez kattintson duplán az egérre. A + jel módosul - és látni fogja azokat a változókat, amelyek a struktúrát alkotják. A struktúrát az egérrel duplán kattintva is bezárhatja.
5. Végrehajtási pontok beállítása
A végrehajtási pontok kétféleképpen oszlanak meg: csak töréspontok és egyszeri töréspontok.
Egyetlen töréspont
Menj a kód ablak, a PgDn gombbal vigye a kurzort a sor az 61-(ugyanaz lehet tenni a parancs U 0,61) ebben a sorban, hogy az első hívás Win32 API RegisterClass funkciót. A HERE paranccsal (F7 billentyű) futtassa a programot ehhez a sorhoz.
A hibás programban a jelenlegi sor volt a sor: Megjegyzés: ugyanazt az eredményt érhetjük el a G .61 paranccsal (hajtsa végre a programot a 61. sor előtt).
Közös töréspontok
A következő lépések bizonyítják a konvencionális töréspontok azaz amelyek akkor aktiválódik, amíg nem törli őket. Keresse meg a következő hívás RegisterClass amely összhangban 74. Vigye a kurzort a sorban, és adja meg a BPX parancs (töréspont futtatható), vagy nyomja meg az F9 (ezt a parancsot, a memóriában a helyét helyét a parancs a kurzor van rögzítve INT3 csapat, de nem látom. sort kell emelni. távolítani egy töréspont, akkor újra bemenetre ugyanazt a csapatot. Ha elég szerencsés, hogy saját a Pentium processzor, telepítését és eltávolítását töréspontok csökken dupla kattintással, hogy a csapat, ahol be szeretné állítani a töréspontot. Amint a szájban anovki töréspontok fut a program, amikor a program utasítások végrehajtására INT3, átadja ellenőrzés SoftIce G vagy X (kulcs F5) parancsot, majd ő fog megjelenni, mielőtt látná információt a telepített töréspontok lehet BL (töréspont List) parancs ..:
Mivel a RegisterAppClass funkció következő lépésenkénti nyomvonala nem értelmes számunkra, visszatérünk arra a helyre, ahonnan ezt a funkciót hívták. Ehhez van egy P parancs a RET paraméterrel (F12 billentyű). Ez lehetővé teszi, hogy a program futtatásához, amíg nem találkozik egy parancsot RET (RETF), miután végre ezt a parancsot SoftIce ki rutinok és tartsa a vonalat követi a hívást a rutin. Ami a program: RegisterAppClass funkciót nevezik a WinMain funkció SoftIce itt WinMain funkció a sorban következő hívás RegisterAppClass funkciói, vagyis a vonal kijelölésre kerül:
Használja a BC csapat (töréspont törlése) a számát töréspontok, hogy megnézted a parancs BL, mert ez megszüntetné az adott töréspont, vagy helyett a száma, típusa *, akkor vegye el minden töréspont (megadhatja száma töréspontok keresztül vessző, ha azt szeretné, hogy távolítsa el néhány pontot).
6. Az információs parancsok használata
A SoftIce számos különböző parancsot kap, amelyekkel megismerheti az állapotot és további információt kaphat az operációs rendszerről és a benne futó alkalmazásokról. Csak két parancsot veszünk figyelembe: H (Súgó) és CLASS. Ezek a parancsok sok információt tartalmaznak a parancsablakban, ezért kívánatos az ablak méretének növelése, ezért bezárjuk a helyi változók ablakát (Locals Window).
A H paranccsal kaphat segítséget minden SoftIce parancsból vagy részletesebb információról egy adott parancsról, ha megadja a nevét H parancs argumentumként:
Az első sor leírja a parancsot, a második a parancsban használható szintaxisra és érvekre vonatkozó információkat jeleníti meg, a harmadik sor egy példát tartalmaz a parancs használatáról.
A RegisterAppClass funkció célja, hogy regisztráljon egy sablont azokhoz az ablakosztályokhoz, amelyeket a GdiDemo alkalmazás az ablakok létrehozásához használ. A CLASS paranccsal megtekintheti a regisztrált osztályokat a GdiDemo számára:
7. Szimbolikus nevek
Amikor betölt egy alkalmazást hibakeresési információkkal, a SoftIce automatikusan létrehoz egy szimbólumtáblát, amely tartalmazza az alkalmazásban meghatározott összes nevet. A TABLE parancs használatával láthatja, hogy melyik szimbólum táblázat neve van betöltve:
A pillanatnyilag használt szimbólumtáblázat színe kiemelt. Ha az aktuális szimbólum tábla nem egyezik az egyik, hogy hivatkozik a kérelmet, akkor használja a TABLE parancs nevét az alkalmazás érvként, hogy csatlakozik-e a megfelelő táblázatot (ha a tábla jön létre az alkalmazás):
A SYM parancs használatával láthatja az aktuális táblázatban definiált szimbolikus neveket (a képernyők szegmensek szerint jeleníthetők meg, abból betűrendben). Ha bizonyos konkrét nevek iránt érdeklődik, akkor használja a sablonokat:
8. Feltételes töréspontok
Töréspont beállítása a LockWindowInfo függvényben.
A BPX LockWindowInfo parancs segítségével adjon meg egy töréspontot a végrehajtás végrehajtásakor. Minden alkalommal, amikor az egyik ablakot a kérelemben GDIDEMO frissítenie kell az adatokat, akkor a program az úgynevezett LockWindowInfo funkció, mivel ez a funkció beállítása a töréspont, hogy fogják hívni SoftIce. A BL parancs segítségével ellenőrizze, hogy megtörtént-e egy töréspont. Futtassa az alkalmazást az X vagy a G paranccsal. Amint a LockWindowInfo funkció hívásra kerül, megjelenik a SoftIce. Mivel a frissítés folyamatosan zajlik, a SoftIce-t folyamatosan hívják, ami nagyon kellemetlen, ha egy bizonyos ablak frissítése érdekel. Az adott ablak frissítéséhez, például a POLYDEMO-hoz való meghívás elfogadásához feltételes töréspontot használunk. Az eredeti szöveg a program (wininfo.c fájl), amely LockWindowInfo függvény bemenetén megkapja érv egy paraméter HWND (Handle Window) - a kilincs, és visszatért a hívó függvény egy értéket - egy mutató a változó az adott ablakot. Vagyis, ha csak a POLYDEMO ablakkezelőben töréspontot indítottunk volna el, elérnénk a célunkat. Először is tudnunk kell az ablakunk fogantyújáról, ezért használjuk a parancsot:
Most, hogy tudjuk, hol és mi jut el hozzánk a függvényben, beállíthatunk egy feltételes töréspontot. Ehhez felhívjuk a LockWindowInfo funkció töréspontjának szerkesztését:
A parancssor alsó sorában a következő sor jelenik meg:
és a kurzor a vonal végén helyezkedik el. Mostantól a töréspontot tetszés szerint szerkesztheti, a sor végén adja meg a következő feltételt: és nyomja meg az Enter billentyűt.
A töréspont így fog kinézni:
Kapcsolja ki a 0 töréspontot a BD (Breakpoint Disable) paranccsal:
A BC parancstól eltérően, amely törli a töréspontot, a BD parancs átmenetileg letiltja a pontot, azaz nem ég, de a BE (Breakpoint Enable) paranccsal bármikor újra bekapcsolhatja. A letiltott töréspontokat a töréspont sorozatszáma mellett egy csillag jelzi.
Kezdés SoftIce csapatok X vagy a G, amikor POLYDEMO ablak megpróbál hozzáférni az első dupla szó az adatok másolatát ablakot, a töréspont elindul, és SoftIce bukkan fel, akkor előfordulhat a funkciók és PolyRedraw PolyDrawBez. Ezek a függvények hozzáférnek az nBezTotal mezőhöz, amely nullapontú eltolás a POLYDEMO ablak példányadataiban. Ennek a mezőnek a értéke megadja a görbék számát a POLYDEMO ablakban egyidejűleg.
Megjegyzés: Az Intel processzorok architektúrájának sajátosságai miatt a memóriasejthez való hozzáférés lehallgatása a memóriára utaló utasítás végrehajtása után következik be. A SoftIce megáll a következő csapatban.
Törölje az összes töréspontot a BC * paranccsal és lépjen ki a SoftIce programból.
Hogyan lehet a SoftIce-t működni?
Config.Sys: Eszköz = c: \. \. \ S-Ice.Exe
Ezután futtassa az Ldr.Exe-t. Az MS-DOS-nak van egy kis hibája: helytelenül állítja be az SP regiszter értékét - csökkenti az értékét 2-tel, és néhány olyan védelem, amely aktívan használja a köteget, felborítja a feladatot. Az MS-DOS kódot az INT 21h AX = 4B01h betöltésekor vagy az "R SP = SP + 2" paranccsal kezeli,
Hogyan működik a SoftIce / Win / W95?
Szerkessze a WINICE.DAT fájlt, engedélyezze a hibakereső számára a szimbólumadatok betöltését a rendszer DLL-ből. (A Winice.DAT-ban vannak linkek a USER.EXE, KRNL386.EXE, WIN386.EXE fájlokhoz)