Assembly-sprog og x86-systemprogrammering på lavt niveau · Lektion

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.

Lektion 4 af 413 trin

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, esp

Allokering 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 locals

Adgang til lokale variable

Referer til hver lokal variabel ved en fast forskydning under basispegeren.

mov dword [ebp-4], 10   ; first local = 10

Adgang til parametre

I det klassiske cdecl-layout ligger parametrene over den gemte EBP og returadressen ved positive forskydninger.

mov eax, [ebp+8]        ; first argument

Epilogen

Før du returnerer, skal du gendanne stakken og basispegeren, så kalderens ramme er intakt.

mov esp, ebp
pop ebp
ret

Genvejen LEAVE

Instruktionen LEAVE udfører mov esp, ebp og derefter pop ebp i ét trin — en kompakt epilog.

leave
ret

Kort 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 LEAVE er genvejen
Gratis at komme i gang

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

  1. Grundprincipper i call stack
  2. Definition og kald af procedurer
  3. Videregivelse af argumenter og returværdier
  4. Stack frames og lokale variabler
← Tilbage til Assembly-sprog og x86-systemprogrammering på lavt niveau