Egy funkció B

Az alábbiakban a viselkedését a hívási verem függvényében si. Részletek igazak gcc fordítóval az Intel Pentium platform. Nagyon sok módja van, és megállapodások létrehozása és töltse ki a keretet: a különböző processzorok, az operációs rendszerek és fordítóprogramok tudja csinálni különböző módon.

függvényhívás

Ha a hívott függvénynek nyilvántartások EAX, ECX és EDX, a hívó kell menteni őket valamilyen módon a veremben, mielőtt hívja az alprogramot. Másrészt, a hívott függvény visszaállítani az értékek e nyilvántartások. Ha a hívott függvény módosítja az állam az EAX regiszter, az ECX és az EDX, először meg kell menteni a korábbi állapotot a köteget, mielőtt azokat visszaállítani az eredeti értékükre.

Átadott paramétereknek az ize függvényben helyezzük a verem jobbról balra: az első, az utolsó érv, hogy a végén a legelső. A lokális változók, valamint az idő, tárolja a verem.

Tekintsünk egy lépcsőzetes folyamat hívó és nézni a változások a verem.

Hozzászólások a hívó a hívás előtt

Ebben a példában a hívó függvény fő, és az úgynevezett ize. Mielőtt hívja a fő funkciója használja az ESP és EBP regisztrálja dolgozni saját keretet.
1. A fő funkciója helyezi a verem tartalmát a nyilvántartások EAX, ECX és EDX. Ez egy opcionális akció fordul elő, hogy ha az állam a nyilvántartások kell menteni.
2. A fő funkciója helyezi az érveket verem, kezdve az utolsóig. Például, ha a hívás az űrlap
a = ize (12, 15, 18);
szerelő nézhet ki:

3. fő kéri az alprogramot hívás

Egy funkció B
Ábra. 2 Állapot keret hívás után hívást

A 2. ábra mutatja a tartalmát a keret hívás utáni funkciót teljesülnek. A piros vonal ezen és a következő számokat választja el a tartalmát a verem, amely azért jött létre függvényhívás a többi tartalom. A funkció meghívása után a verem tetején ismét lesz ebben a helyzetben.

Hozzászólások hívó függvény a hívás befejezése után

W tyúk a function ize átveszi az irányítást, azt kell 3 dolog: beállítani a keret, kiosztani tér helyi tárolására, a fenntartásához szükséges az állam a EBX, ESI és EDI.

Így ize első beállítja a saját keretet. Több EBP pozícióját jelzi a keret fő. Ezt az értéket meg kell őrizni, így kerül a verem. A tartalma átkerül a ESP EBP. Ez lehetővé teszi, hogy a fogantyút az érveket funkciók, mint például a váltás EBP és ingyenes ESP stack pointer további intézkedés céljából. Ezért szinte valamennyi funkcióját B kezdődik az utasításokat

Egy funkció B
Ábra. 3 keret hívása után: A hívott függvény tartotta értékét a bázis fő funkciója pointer

Lokális változók és az átmeneti tárolás már elérhető egy eltolva EBP. Összefoglalva, ize kell menteni a tartalmát a EBX, ESI és EDI a verem. ha használják őket.

Egy funkció B
Ábra. 4. Most ize funkciót tudja teljesíteni a szervezet

Most lehet alakítani szervezet funkcióit. Ebben az esetben az új adatokat lehet helyezni és el kell távolítani a stack. Ezért ESP verem mutatót lehet változtatni, de EBP marad és az első érv lehet elérni [EBP + 8], függetlenül attól, hogy hány push and pop műveletek volt köszönhető. A function ize viszont is vezethet más funkciót hívások vagy rekurzív hívást. Azonban, mivel EBP visszaáll után visszatért ilyen beágyazott hívások hivatkozásokat érveket, a helyi változókat és az átmeneti tárolás a dolgokat is el lehet végezni azáltal képest EBP.

Hozzászólások hívott függvény, mielőtt visszatérne

N Mielőtt a visszatérő vezérlést a hívó, ize kell meghatározni oly módon, hogy vissza értéket, mint már említettük. Az eredmény kerül nyilvántartásba EAX, vagy egy további paraméter a funkció, és a függvény nem ad vissza értéket.

Másodszor, ize vissza kell állítania az érték a EBX, ESI és EDI. Elején a hívást, akkor tegyen egy értéket a verem nyilvántartások (például a függvény megváltoztatni őket), és most már tudja, hogy távolítsa el ezeket az értékeket onnan, de csak akkor, ha az ESP tartja a helyes értéket, vagyis az összeg push és pop működését egyensúlyban kell lennie.

Miután ezt a két lépést a helyi változók és ideiglenes tárolása már nem szükséges, és a keret eltávolítható utasításokat követve

Egy funkció B
Ábra. 5 Office visszatért a fő funkciója

Hozzászólások hívó függvény után visszatért

Fter hogy vyzyvayuscheo ellenőrzés átadását a függvénynek (ebben a példában, fő), az argumentumokat a függvény általában nincs szükség. Mi lehet elállni a verem, mindhárom értéket egyszerre egyszerű hozzáadásával 12 (3 × 4 bájt), hogy a stack pointer.

A végén, ha a tartalom az EAX regiszterben, az ECX és EDX lett mentve a verem, akkor vissza lehet állítani. Így a verem ismét az állapot, amelyben a hívás működni.

ru-Cyrl 18- bemutató Sypachev S. S. 1989/04/14 [email protected] Stepan Sypachev diákok

Még mindig nem világos? - írási kérdésre a dobozban

Kapcsolódó cikkek