Megosztás a következőn keresztül:


Hibakeresés Assembly módban

Ha C vagy C++ forrásfájlokkal rendelkezik az alkalmazáshoz, sokkal hatékonyabban használhatja a hibakeresőt, ha forrás módban keres.

A forráskeresést azonban sokszor nem lehet elvégezni. Előfordulhat, hogy nem rendelkezik az alkalmazás forrásfájljaival. Lehet, hogy épp valaki más kódját debuggolod. Előfordulhat, hogy nem teljes .pdb szimbólumokkal építette ki a végrehajtható fájlokat. Ha pedig forráskeresést is végezhet az alkalmazásban, előfordulhat, hogy nyomon kell követnie a Microsoft Windows-rutinokat, amelyeket az alkalmazás hív, vagy amelyeket az alkalmazás betöltéséhez használnak.

Ilyen esetekben assembly módban kell hibakeresést végeznie. Ezenkívül az összeállítási mód számos hasznos funkcióval rendelkezik, amelyek nem szerepelnek a forráskeresésben. A hibakereső automatikusan megjeleníti a memóriahelyek tartalmát, és a hozzáférésükkor regisztrálja őket, és megjeleníti a programszámláló címét. Ez a kijelző értékes eszközként teszi lehetővé a szerelvény hibakeresését, amelyet a forráskereséssel együtt használhat.

Szétszerelési kód

A hibakereső elsősorban bináris végrehajtható kódot elemez. A kód nyers formátumban való megjelenítése helyett a hibakereső szétszereli ezt a kódot. Ez azt jelzi, hogy a hibakereső gépi nyelvről szerelvénynyelvre konvertálja a kódot.

Az eredményül kapott kódot (más néven szétszerelési kódot) többféleképpen is megjelenítheti:

  • Az u (Összeszerelhetetlen) parancs szétszereli és megjeleníti a gép nyelvének egy meghatározott szakaszát.

  • Az uf (Összeszereletlen függvény) parancs szétszereli és megjeleníti a függvényt.

  • A felfelé (a fizikai memóriából való összeszerelés megszüntetése) parancs szétszereli és megjeleníti a gép nyelvének egy megadott szakaszát, amelyet a fizikai memóriában tároltak.

  • A ur (Unassemble Real Mode BIOS) parancs szétszerel és megjelenít egy megadott 16 bites valós módban írt kódot.

  • Az ux (Unassemble x86 BIOS) parancs szétszereli és megjeleníti az x86-alapú BIOS-kód utasításkészletét egy megadott címen.

  • (Csak WinDbg) A szétszerelt ablak szétszereli a gépet, és megjeleníti a gép nyelvének egy adott szakaszát. ez az ablak automatikusan aktív, ha az ablak menüjében az automatikusan megnyíló szétszerelési parancsot választja. Ezt az ablakot úgy is megnyithatja, hogy kiválasztja a szétszerelést a nézetmenüben, lenyomja az alt+7 billentyűkombinációt, vagy lenyomja a szétszerelés gombot (alt+7).

A szétszerelési kijelző négy oszlopban jelenik meg: címeltolás, bináris kód, assembly nyelvi mnemonikus és assembly nyelvi részletek. Az alábbi példa ezt a megjelenítést mutatja be.

0040116b    45          inc         ebp            
0040116c    fc          cld                        
0040116d    8945b0      mov         eax,[ebp-0x1c] 

Az aktuális programszámlálót ábrázoló vonaltól jobbra látható megjelenítés megjeleníti az elérni kívánt memóriahelyek vagy regiszterek értékeit. Ha ez a sor águtasítást tartalmaz, megjelenik a [br=1] vagy a [br=0] jelölés. Ez a jelölés egy olyan ágat jelöl, amelyet a rendszer nem vagy nem vesz fel.

Az .asm (Change Disassembly Options) paranccsal módosíthatja a szétszerelt utasítások megjelenítését.

A WinDbg Szétszerelés ablakában az aktuális programszámlálót jelképező sor ki van emelve. A töréspontok beállítására szolgáló vonalak is ki vannak emelve.

A szerelvény kódjának módosításához az alábbi parancsokat is használhatja:

  • A # (Szétszerelési minta keresése) parancs egy adott minta memóriaterületén keres. Ez a parancs egyenértékű a szétszerelési megjelenítés négy oszlopának keresésével.

  • A (Assemble) parancs végrehajthatja a szerelvény utasításait, és lefordíthatja őket bináris gép kódjába.

Összeszerelési mód és forrás mód

A hibakereső két különböző működési móddal rendelkezik: szerelvény mód és forrás mód.

Ha egy alkalmazáson keresztül egyesével lépeget, egyetlen lépés mérete egy összeállított kód sor vagy egy forráskódsor, a módtól függően.

Számos parancs különböző adatkijelenítéseket hoz létre a módtól függően.

A WinDbg-ben a Szétszerelés ablak automatikusan az előtérbe kerül, amikor szerelvény módban futtat vagy lépeget egy alkalmazáson. Forrás módban a Forrás ablak az előtérbe kerül.

A mód beállításához tegye az alábbiak egyikét:

  • A mód szabályozásához használja az l+, l - (Forrásbeállítások megadása) parancsot. Az l-t parancs aktiválja a szerelvény üzemmódot.

  • (Csak WinDbg) Törölje a Forrás mód kijelölését a Hibakeresés menüből, hogy a hibakereső assembly módba lépjen. A Forrás mód kikapcsolva gombot is kiválaszthatja az eszköztáron.

A WinDbg-ben szerelvény módban az ASM megjelenik az állapotsoron.

A WinDbg Szétszerelés ablakának helyi menüje tartalmazza az aktuális forrássor parancs kiemelési utasításait . Ez a parancs az aktuális forrássornak megfelelő összes utasítást kiemeli. Egy forrásvonal gyakran több szerelvényutasításnak felel meg. Ha a kód optimalizálva van, előfordulhat, hogy ezek a szerelvényutasítások nem egymást követőek. Az aktuális forrássor parancs kiemelési utasításai lehetővé teszik az összes, az aktuális forrásvonalból összeállított utasítás megkeresését.

Szerelvény nyelvi forrásfájljai

Ha az alkalmazás szerelvénynyelven lett megírva, előfordulhat, hogy a hibakereső által előállított szétszerelés nem felel meg az eredeti kódnak. Különösen az NO-OPs és a megjegyzések nem lesznek jelen.

Ha az eredeti .asm fájlokra való hivatkozással szeretné hibakeresésre használni a kódot, akkor forrásmódú hibakeresést kell használnia. A szerelvényfájlt úgy töltheti be, mint egy C vagy C++ forrásfájlt. Az ilyen típusú hibakereséssel kapcsolatos további információkért lásd: Hibakeresés forrás módban.