Stabelramme

Stack frame (fra engelsk  stack frame ) - en mekanisme til at sende argumenter og allokere midlertidig hukommelse (i procedurerne for programmeringssprog på højt niveau) ved hjælp af systemstakken .

Teknologi

Typisk bruges systemstakken til at gemme returadresser, når subrutiner kaldes, samt gemme/gendanne processorregisterværdier.

Bestå argumenter

Når en procedure kaldes, skubbes argumenterne ind på stakken, før subrutinen kaldes. Således modtager proceduren en stak, i toppen af ​​hvilken der ligger returadressen, og under den - de argumenter, som den blev kaldt.

Når du vender tilbage fra proceduren (eller efter den, se nedenfor), skal argumenterne springes af stakken.

Midlertidig hukommelsesallokering

Hvis stakmarkøren flyttes "højere" (i retning af at øge stakken), vil en del af hukommelsen på stakken være ubrugt (inklusive når den tredje procedure kaldes) og kan bruges af proceduren efter eget skøn, op til det øjeblik, den vender tilbage til den procedure, der kaldte den. Således organiserer sprog på højt niveau variabler, der kun eksisterer inden for en procedure (C-sproget kalder dem "automatiske").

Inden returnering skal proceduren returnere stakmarkøren til dens oprindelige position (det vil sige til returadressen).

Konventioner for forskellige programmeringssprog

Forskellige kompilatorer af højniveausprog nærmer sig organisationen af ​​stackrammen på forskellige måder, afhængigt af hardwareplatformens egenskaber og standarderne for et bestemt sprog. De væsentligste forskelle relaterer sig til den rækkefølge, som argumenter sendes ind på stakken, og hvornår de hoppes af stakken ved retur.

Stack Frame Ulemper

Stakrammen er en praktisk teknologi til at allokere midlertidig hukommelse til at sende et vilkårligt antal argumenter eller til intern brug. Det har dog en række ulemper.

Ydeevne

At sende data gennem hukommelsen forsinker unødigt programafviklingen (sammenlignet med assemblersprogprogrammer , hvor de fleste argumenter og midlertidige data er placeret i processorregistre).

For at reducere adgangen til lokale variabler er programmet ved kompilering optimeret til at bruge registre i stedet for variabler i hukommelsen eller til at gemme deres mellemværdier.

Nogle sprog bruger kaldekonventioner, der understøtter at sende heltalsargumenter gennem registre.

Sikkerhed

Stakrammen sammenfletter applikationsdata med kritiske data – pointere, registerværdier og returadresser. Dette, kombineret med arkitekturen af ​​nogle processorer (nemlig retningen for stakvækst), gør det meget let at opnå ondsindet overløb af kritiske data på grund af et bufferoverløb (naturligvis skal programmet først indeholde en fejl, der tillader overløbet til forekomme).

Sådan en "mislykket", fra synspunktet om bufferoverløb, har maskinstakkens vækstretning hardwareplatforme: X86 .

Et stackbufferoverløbsangreb implementeres normalt som følger:

Se også