Rama stivei

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În calcul, un cadru de stivă este o zonă de memorie a stivei de apeluri care conține datele necesare pentru subrutina (sau funcția) de executare curentă .

Are, la rândul său, o structură de stivă și conține, la baza sa, datele pentru a restabili registrele indicatorului procesorului (cum ar fi registrele EBP și ESP în arhitectura IA-32 ), făcându-le să revină la declarația 'imediat după apel al funcției în execuție, în fluxul programului principal (sau al funcției de apelare).

Introducere

Când un program compilat este rulat pe un computer , acesta trebuie să aloce memorie pentru executarea acestuia.

Memoria de execuție este o porțiune de memorie împărțită în zone ( segmentarea memoriei ):

  • text: care conține instrucțiunile programului, în limbajul mașinii
  • BSS: utilizat pentru stocarea variabilelor globale și / sau statice, conține părțile corespunzătoare variabilelor globale NEinicializate
  • date: utilizate pentru stocarea variabilelor globale și / sau statice, umplute cu variabile globale inițiale (definite la început), șiruri și alte constante care sunt utilizate pe tot parcursul programului.
  • heap: utilizat pentru variabilele de program rămase
  • stivă : Folosit pentru a urmări unde fiecare subrutină activă ar trebui să returneze controlul când termină execuția și pentru variabilele locale și parametrii funcției.

Stiva (sau Call Stack ) este în continuare fragmentată cu utilizarea cadrelor stivei, deoarece execuția programului nu mai este liniară atunci când este apelată o funcție. Aceasta trebuie să urmeze fluxul său de comenzi, care se află în adrese de memorie nesecvențiale în raport cu cele din programul „apelant”. Prin urmare, este creată necesitatea unei „stive în stivă”, astfel încât funcția să își poată urmări fluxul și, la terminare, să permită procesorului să reia fluxul programului principal unde a fost întrerupt (la adresa, prin urmare, din comanda imediat următoare la cea de apelare a funcției, în asamblare: „apel”).

Exemplu de operație (arhitectură IA-32 )

Când se apelează o funcție, mai multe elemente sunt împinse pe stivă, într-o structură numită cadru de stivă . registrul EBP, numit uneori pointer cadru (FP) sau pointer local de bază (LB), este utilizat pentru a se referi la variabilele din cadrul curent al stivei. [1]

Fiecare cadru de stivă conține parametrii funcției, variabilele sale locale și doi indicatori care sunt necesari pentru a restabili situația inițială:

  • indicatorul de cadru salvat (SFP)
  • adresa de retur

SFP este utilizat pentru a restabili EBP la valoarea sa anterioară, în timp ce adresa de returnare este utilizată pentru a seta EIP la adresa instrucțiunii imediat după cea a apelului de funcție.

Dacă o funcție ar fi apelată din interiorul alteia, un nou cadru de stivă ar fi împins pe stivă și adresa sa de returnare ar fi adresa instrucțiunii care urmează invocării funcției apelate în funcția de apelare.

Notă

  1. ^ Erickson, Jon, criptolog., The Art of Hacking: Hacker's Ideas, Tools, Techniques , Apogeo, 2004, ISBN 88-503-2280-1 ,OCLC 799623398 . Adus la 1 decembrie 2019 .

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT