Verem keret

Stack frame (az angol  verem keretből ) - az argumentumok átadására és az ideiglenes memória lefoglalására szolgáló mechanizmus (a magas szintű programozási nyelvek eljárásaiban) a rendszerverem segítségével .

Technológia

Általában a rendszerverem a visszatérési címek mentésére szolgál szubrutinok hívásakor, valamint a processzorregiszterértékek mentésére/visszaállítására.

Argumentumok átadása

Egy eljárás meghívásakor az argumentumok az alprogram meghívása előtt a verembe kerülnek. Így az eljárás kap egy verem, amelynek tetején fekszik a visszatérési cím, és alatta - az argumentumok, amelyekkel hívták.

Az eljárásból visszatérve (vagy utána, lásd alább), az argumentumokat ki kell emelni a veremből.

Ideiglenes memóriafoglalás

Ha a veremmutatót „magasabbra” toljuk (a verem növelésének irányába), akkor a veremben lévő memória egy része használaton kívül lesz (beleértve a harmadik eljárás hívását is), és az eljárás saját belátása szerint használhatja, felfelé abban a pillanatban, amikor visszatér az azt hívó eljáráshoz. Így a magas szintű nyelvek olyan változókat szerveznek, amelyek csak egy eljáráson belül léteznek (a C nyelv "automatikusnak" nevezi őket).

A visszatérés előtt az eljárásnak vissza kell állítania a veremmutatót az eredeti helyére (vagyis a visszatérési címre).

Konvenciók a különböző programozási nyelvekhez

A magas szintű nyelvek különböző fordítói különböző módon közelítik meg a veremkeret szervezését, a hardverplatform jellemzőitől és az adott nyelv szabványaitól függően. A fő különbségek az argumentumok verembe való átadási sorrendjében és a veremből való visszatéréskor történő kiugrásának sorrendjében mutatkoznak meg.

Stack Frame hátrányai

A veremkeret kényelmes technológia az ideiglenes memória lefoglalására tetszőleges számú argumentum átadására vagy belső használatra. Ennek azonban számos hátránya van.

Teljesítmény

Az adatok memórián keresztüli továbbítása szükségtelenül lelassítja a programvégrehajtást (összehasonlítva az assembly nyelvű programokkal , amelyekben a legtöbb argumentum és ideiglenes adat a processzor regisztereibe kerül).

A helyi változókhoz való hozzáférés csökkentése érdekében a program fordításkor úgy van optimalizálva, hogy változók helyett regisztereket használjon a memóriában, vagy tárolja azok köztes értékeit.

Egyes nyelvek olyan hívási konvenciókat használnak, amelyek támogatják az egész argumentumok átadását a regisztereken.

Biztonság

A veremkeret az alkalmazásadatokat kritikus adatokkal – mutatókkal, regiszterértékekkel és visszatérési címekkel – átlapolja. Ez egyes processzorok architektúrájával (nevezetesen a verem növekedési irányával) kombinálva nagyon könnyen elérhetővé teszi a kritikus adatok rosszindulatú túlcsordulását a puffer túlcsordulása miatt (természetesen a programnak először tartalmaznia kell egy hibát, amely lehetővé teszi a túlcsordulást előfordul).

Egy ilyen "sikertelen", a puffertúlcsordulás szempontjából a gépverem növekedési iránya hardverplatformokkal rendelkezik: X86 .

A verempuffer túlcsordulási támadás általában a következőképpen valósul meg:

Lásd még