Stack frames og lokale variabler
Opret og nedbryd stack frames ved hjælp af base pointeren (EBP/RBP), så De kan allokere lokale variabler og tilgå parametre pålideligt i procedurer.
Stack frames og lokale variabler er en gratis Assembly-sprog og x86-systemprogrammering på lavt niveau-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Assembly-sprog og x86-systemprogrammering på lavt niveau, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset indeholder 4 lektioner i alt.
Hvorfor stakrammer?
En procedure har brug for plads til sine egne lokale variable og en stabil måde at finde sine parametre på. En stakramme giver hvert kald sit eget private område på stakken.
Basispegeren
Basispegeren (EBP i 32-bit og RBP i 64-bit) giver en fast reference ind i rammen, mens ESP fortsætter med at flytte sig, når du lægger værdier på stakken og henter dem af.
Prologen
En procedure begynder med at gemme den gamle basispeger og oprette en ny ramme.
push ebp
mov ebp, espAllokering af lokale variable
Reserver plads til lokale variable ved at trække fra stakpegeren. De lokale variable ligger derefter ved negative forskydninger fra EBP.
sub esp, 8 ; room for two 4-byte localsAdgang til lokale variable
Referer til hver lokal variabel ved en fast forskydning under basispegeren.
mov dword [ebp-4], 10 ; first local = 10Adgang til parametre
I det klassiske cdecl-layout ligger parametrene over den gemte EBP og returadressen ved positive forskydninger.
mov eax, [ebp+8] ; first argumentEpilogen
Før du returnerer, skal du gendanne stakken og basispegeren, så kalderens ramme er intakt.
mov esp, ebp
pop ebp
retGenvejen LEAVE
Instruktionen LEAVE udfører mov esp, ebp og derefter pop ebp i ét trin — en kompakt epilog.
leave
retKort over rammens layout
Fra høje til lave adresser i en typisk ramme:
- Parametre [ebp+8], [ebp+12]
- Returadresse [ebp+4]
- Gemt EBP [ebp]
- Lokale variable [ebp-4], [ebp-8]
Hvorfor gemme EBP?
Hvert kald gemmer kalderens EBP, så indlejrede kald hver især kan have en gyldig ramme, og kæden kan rulles tilbage. Det bruger fejlfindingsværktøjer til at udskrive stakspor.
Udeladelse af rammepegeren
Optimerende compilere kan springe opsætningen af EBP over for at frigøre et register og i stedet adressere lokale variable relativt til ESP. Det er hurtigere, men sværere at fejlfinde.
Hurtig kontrol
Test din forståelse af stakrammer.
Opsummering
Du lærte stakrammer at kende:
- Prolog:
push ebp,mov ebp, esp - Reserver lokale variable med
sub esp, og få adgang til dem ved[ebp-N] - Parametre ved
[ebp+N] - Epilogen gendanner rammen, og
LEAVEer genvejen
Lær Assembly med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Stack frames og lokale variabler” gratis?
Ja — hele teksten til “Stack frames og lokale variabler” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset, skal du opgradere til CoddyKit PRO. Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Stack frames og lokale variabler”?
Opret og nedbryd stack frames ved hjælp af base pointeren (EBP/RBP), så De kan allokere lokale variabler og tilgå parametre pålideligt i procedurer. Du øver dig i Assembly-sprog og x86-systemprogrammering på lavt niveau med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Assembly-sprog og x86-systemprogrammering på lavt niveau?
Der kræves ingen tidligere erfaring. Assembly-sprog og x86-systemprogrammering på lavt niveau på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Stack frames og lokale variabler”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Assembly-sprog og x86-systemprogrammering på lavt niveau-lektion?
Ja. Alle Assembly-sprog og x86-systemprogrammering på lavt niveau-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundprincipper i call stack
- Definition og kald af procedurer
- Videregivelse af argumenter og returværdier
- Stack frames og lokale variabler