vízforraló Blogok
Stack.
nyolcadik napon
Stack - egy speciálisan dedikált memória terület adatátvitelre vagy tárolásra.
Mostantól látva egyfajta rekord (prax03.com):
Tehát ebben ábrázolása a verem felnő.
A verem tetején jelzi az ESP regiszter mutató - ez a célja (Stack Pointer - a stack pointer).
Lásd prax03 összhangban 12h tárolja az értéket DX nyilvántartások, és on-line 07, a következő alkalommal a hurok vissza visszaállítja ezt az értéket. Ebben a példában a verem használt kényelmetlen, de ha a programnak szüksége van egy csomó időt, hogy fenntartsák a különböző nyilvántartások, akkor jobb csinálni a kéményen át. Rögzíteni a verembe PUSH parancs van.
És az értékek a verem lehet megállapítani nagyon.
Vegye figyelembe, hogy az értékek letöltött fordított sorrendben. Vertex jön először, és az alján az utolsó. A gyakorlatban az Isten dicsőségét, a bölcs a verem egy kicsit, de ha nem elkapni Elvileg a program képes lesz nehéz írni.
Sailor! Gyere ide. Mi van a kosárban? Oh, reggeli! Tehát, a tetején a tojás, tart, egy szendvics, egy üveg. párna? Miért pad? Ön lefekvés az óra! Gyerünk, adja ide a kosárba. A tojás egy nyers, baszd meg szerelmére! És szendvicseket maszatos és tönkretett párnát. Mit csóva azokat nem főzött? Menj el, tudom magam, hogy a tojásokat fel a tetején.
Memória a verem kiosztja a Windows.
Most érdemben vissza az első programot a szellőzők:
Tolja a csapat felveszi a verem érték fölé is. Lehet két vagy négy bájt. A 32 bites programok ez lesz a 32-bites érték, amely DWORD (4 byte). Tehát most egy értéket a verem 4 byte számunkra.
Ez, természetesen, az egész és a „kényelem” az olvasás, az alacsony byte joga vezető balra.
Sailor, emlékszel, hogy a rajzok a teljes harci egység bináris byte beépített eltöltött balról jobbra? Minden junior - a bal, minden vezető - a megfelelő (az ábrán az ilyen rajzokat :).
Ott vannak a fő központja van zaputka - verem. Ő rajz megy a aljától a tetejéig. Egész szám (szó vagy DWORD) benne pontosan illeszkednek: alulról a csúcsra.
Valóban, a verem könnyebb képviselni magasságú, mint egy vonal mentén. Ez az, amit akkor kell tartalmaznia a verem előtt végrehajtó 40100Eh sor a programban.
Minden sor itt - egyetlen értéket a verem. A koncepció az alsó nagyon világosan leírja, hogyan verem.
Nézzük eltávolítani a forráskódját ezt a sort:
És írni ahelyett, hogy itt a következő parancsokat:
Gyűjtse programot. Megnyitás Olly.
Mit tettél a hibakereső CodeView F10 billentyűt, az úgynevezett okos dolog:
lépésről lépésre nyomon követés végrehajtható kódot anélkül, hogy az eljárás során. Olly Ebben a „lépés” végzi kulcs F8.
Amikor eljut a 401014h vonal (F8 négyszer), a verem fog kinézni:
Nézze meg a debugger, hogy biztos! Az alsó jobb oldali.
Meg kell értenie, hogy minden új érték kerül a tetejére. Kiderült, a növekvő halom felfelé. Tehát, ESP regisztrálnia minden egyes új értékét a verem csökken. És minden alkalommal, amikor az értéke a verem eltávolítjuk, ESP megnöveljük 4 (vagy 2 16 bites alkalmazások).
És még mindig szükség van, hogy összehangolják a verem, különben a program nem fog megfelelően működni. Miután az adatok a verem dolgozott, vagy egyszerűen már nincs szükség, vissza a legjobb pozíció, amelyet megelőzően elfoglalt - ez a beállítás. Ha nem így tesz, a program nem indul el.
Stack, talán a legnehezebb amit meg kell értenünk írásban assembly programokban. Őszintén, őszintén, ha megérted, akkor biztosan tanulni minden mást. A gyakorlat természetesen szükség van, emlékszem, három napot töltött a megértése a verem. Kalasnyikov becsapták, azt mondta, hogy könnyű. Így volt ez, amikor használják a példákat, de amikor elkezdte írni a saját kisalkalmazásokról verem okozta a legnagyobb nehézséget.
Három nap - Azt hiszem, ez egy kicsit nehéz a legtöbb figyelmet.
Ahhoz, hogy valamit a verem, írd be:
Az angol. szóval tolja - tolja
Ha azt szeretnénk, hogy ki a köteg minden RON megállapított Pusha csapat használat POPA / POPAD
A következő példa (prax06.com).
Írja be Hiew'e ezek bájtok:
Most nézd meg a asm nézetek:
Elemezzük ezt a példát.
Ez a hely a sort a AX regiszter érték 20CD.
Ez teszi a szóvonal halom (szó) 20CDh az EAX regiszter. És a memória a szót, akkor látni fogja, ahogy lennie kell - CD, 20 órán át.
Akkor miért ez a példa nem lóg a számítógépet DOS és ne lógjon magát WinXP? Fuss, és látni fogja, hogy a program végrehajtása egy másodperc töredéke alatt.
Meg lehet próbálni szétszedni trükk CV magad, de ez időbe telik :).
Őszintén, CodeView debugger típus nem nagyon alkalmas elemzése apróságok.
Az a tény, hogy egy egyszerű DOS-programok debuggers használja a verem saját céljaira, hogy lever az érték az ESP terül lépések között. Ott lenne a legjobb, hogy fut a minta alapján SoftIce'om. És akkor is „csak”, hogy milyen a program rögzíti az időt 32637 két byte verem CD20h. Az utolsó alkalommal, amikor a byte lesz írva, hanem a „03 JMP” parancsot.
CD20h - őshonos int 20h parancs kód (hívás befejezése interrupt programok, már tudja).
Kiderült, hogy egy halom folyamatosan növekszik és növekszik, és semmi sem tudja megállítani, kivéve a legutolsót, vagy hibás kód.
És ez kitölti a rendelkezésre álló teret a szegmensben, majd elkezd felülírja az adatokat (ebben a példában, hogy nem). Továbbá, a programkód felülírja.
Ezt a helyzetet nevezzük verem túlcsordulás hiba. Fájl a DOS-os programok ezt a hibát - az egyik leggyakoribb.
A Win32-programot közötti kiosztása rendszerének a köteg fejlettebbek (a tengely maga e kérdést a források felhasználásával védett módban). Azonban verem túlcsordulás hiba - még igazi kihívást jelent a programozók, különösen a biztonság terén. Csak azt lehetett látni, hogy egy hiba miatt a verem kezd.
A CodeView is vezethető a legérdekesebb pont ez a példa. Változás stack pointer regiszter (ESP). Például állítsa be az értéket 200h benne (mindaddig, Tracy). Ezt követően - F10 többször, és a program végén. Nézd meg újra és újra. Talán rájöttek, hogy ez a trükk lehet használni saját céljaikra;).
Azt javaslom, hogy egy másik példát Win32.
Felhívjuk figyelmét, hogy a magyar betűket kell kódolni ANSI (a szellőzők standard).
Írja be, kérem tegye a kód részben. Biztos vagyok benne, hogy lesz a gépelési hibák, és ez nagyon felgyorsítja a tanulási folyamatot.
Annak érdekében, hogy megpróbálja azt tette, amit állítólag ő dob ez minden kulcs típusa:
prax07.exe qwerty
Már csak egy csapat, amely még mindig nem tudom, ebben a programban. CALL parancs, de ez az egész téma. És mellesleg az utolsó elméleti téma az órákat.