Stack frame (z angl . stack frame ) - mechanismus pro předávání argumentů a přidělování dočasné paměti (v procedurách programovacích jazyků vyšší úrovně) pomocí systémového stacku .
Typicky se systémový zásobník používá k ukládání návratových adres při volání podprogramů a také k ukládání/obnovení hodnot registru procesoru.
Když je volána procedura, argumenty jsou vloženy do zásobníku před voláním podprogramu. Procedura tedy obdrží zásobník, na jehož vrcholu leží návratová adresa, a pod ní - argumenty, se kterými byla volána.
Při návratu z procedury (nebo po ní, viz níže) musí být argumenty odstraněny ze zásobníku.
Pokud se ukazatel zásobníku posune „výše“ (ve směru zvětšování zásobníku), pak bude část paměti v zásobníku nevyužita (včetně volání třetí procedury) a může být procedurou použita dle svého uvážení, nahoru do okamžiku, kdy se vrátí k proceduře, která jej vyvolala. Jazyky na vysoké úrovni tedy organizují proměnné, které existují pouze v rámci procedury (jazyk C je nazývá „automatické“).
Před návratem musí procedura vrátit ukazatel zásobníku do původní polohy (tedy na zpáteční adresu).
Různé kompilátory jazyků na vysoké úrovni přistupují k organizaci rámce zásobníku různými způsoby, v závislosti na vlastnostech hardwarové platformy a standardech konkrétního jazyka. Hlavní rozdíly se týkají pořadí, ve kterém jsou argumenty předávány do zásobníku a kdy jsou při návratu ze zásobníku odstraněny.
Rámec zásobníku je vhodná technologie pro přidělování dočasné paměti pro předávání libovolného počtu argumentů nebo pro interní použití. Má však řadu nevýhod.
Procházení dat pamětí zbytečně zpomaluje provádění programu (ve srovnání s programy v assembleru , ve kterých je většina argumentů a dočasných dat umístěna v registrech procesoru).
Aby se omezil přístup k lokálním proměnným, je program při kompilaci optimalizován tak, aby místo proměnných v paměti používal registry nebo ukládal jejich mezihodnoty.
Některé jazyky používají konvence volání, které podporují předávání celočíselných argumentů prostřednictvím registrů.
Rámec zásobníku prokládá data aplikace s kritickými daty – ukazateli, hodnotami registrů a návratovými adresami. To v kombinaci s architekturou některých procesorů (jmenovitě se směrem růstu zásobníku) velmi snadno dosahuje škodlivého přetečení kritických dat v důsledku přetečení vyrovnávací paměti (program samozřejmě musí nejprve obsahovat chybu, která přetečení umožní nastat).
Takový „neúspěšný“, z pohledu přetečení bufferu, směr růstu strojového stacku má hardwarové platformy: X86 .
Útok přetečením zásobníku zásobníku je obvykle implementován následovně: