Mit ‘C’ getaggte Artikel

Parameterübergabe an Unterprogramme per Stack

01.09.2008
von Mario Rasser

Hierbei handelt es sich um eine Vortrag meines Studienkollegens Dipl. Inf. (FH) Frank Grimm zum Thema Parameterübergabe an Unterprogramme per Stack und eine Darstellung der Funktionsweise mit Beispielen.

Voraussetzung

  1. Es gibt ein Register, das auf eine Speicherstelle zeigt, die sich im sogenannten Stack befindet, es wird unter x86 mit esp bezeichnet.
  2. Der Stack in ein Stück Speicher, das sich im Speicherraum eines Prozesses befindet und dient zum Sichern von Werten, zur Wertübergabe an Unterprogramme und zum Anlegen von lokalen Variablen.
  3. Es gibt zwei Befehle, mit denen ein Operant auf dem Stack gesichert bzw. vom Stack geholt werden kann: push und pop.
  4. Jedes push/pop verändert den Stackzeiger (den Inhalt von esp).
  5. Auf x86 wächst der Stack von den hohen Adressen zu niedrigen Adressen auf den Heap zu.
  6. Mit den Befehlen push und pop kann nur nach dem “First In – Last Out”-Prinzip auf Werte im Stack zugriffen werden.
  7. Da esp eine Adresse auf dem Stack beinhaltet, kann aber per Zeigerarithmetik auch beliebig auf den Stack zugegriffen werden.

1. Parameter auf Stack pushen

Der letzte Parameter wird zu erst auf den Stack geschafft, die Parameter werden also von rechts nach links gesichert (gepusht) und können daher im Unterprogramm wieder von links nach rechts gelesen (pop) werden.

2. call zum Unterprogramm

Wie immer, zeigt der Befehlszeiger auf den Speicherplatz mit dem n&äuml;chsten Befehl im Hauptprogramm, dieser Wert des Befehlszeigers wird automatisch vom Befehl call auf den Stack gepusht.

3. Stack-Frame aufbauen und Unterprogramm-Befehle ausfuehren

  1. Wert des ebp-Registers (allgemeines Register) auf Stack sichern (pushen)
  2. Aktuelles esp-Register (Stackzeiger) in ebp sichern (per mov)

Weiterlesen

© 2003-2018 Fa. ipunct - IT-Lösungen auf den Punkt gebracht