[gelöst]Erklärung für den Stack bezüglich ESP, SFP, EBP u.s.w.
-
Hallo Community.
Ich wende mich an dieses Unterforum, weil ich denke das jeder der etwas länger ASM programmiert auch viel vom Stack versteht.Ich lese gerade ein ziemlich interessantes Buch. Darin kommt das Thema Stack vor und es wird sich des öfteren darauf bezogen. Heißt auch auf (berichtigt mich wenn ich falsch liege) den Extended Stack Pointer, Stack Frame Pointer und noch alle anderen.
Also diese Extended Pointer zeigen immer auf verschiedene Stellen im Stack. Soweit hab ich das alles schon verstanden, nur wird dieses Thema im Buch nicht grade groß erklärt. Hätte vielleicht jemand ein paar gute Quellen parat, wo man nochmal alles nachlesen könnte?
Wäre toll.
Gruß, xpilz
-
Internet, z.B.:
http://www-ivs.cs.uni-magdeburg.de/bs/lehre/sose99/bs1/seminare/assembler.shtml
http://andremueller.gmxhome.de/cpu.html#stackreg
http://www.a-m-i.de/tips/stack/stack.phpIst doch letztlich nur ein Teil vom Speicher, der der automatisch (stapelweise) beschrieben und wieder gelöscht wird. Also nichts anderes als wie Wörter auf eine kariertes Blatt Papier schreiben, und nach First in Last out wieder zurückschreiben bzw. löschen.
Oder man meint Stapelspeicher bei Taschenrechnern oder der FPU.
Das Navigieren in diesem Speicherbereich kann man mit allen Indexregistern, aber für die Automatiken wie Push und Pop ist der Stackpoiter da, also das SP Register. SP kann man auch anderweitig verwenden, ist aber nicht zu empfehlen. Daher bedient man sich zur Sicherheit eines weiteren, brüderlichen oder schwesterlichen Indexregisters, das Base Pointer (BP) heißt.
Und so liest man dann in Programmen Sicherungsbefehle wie "mov BP,SP" und im Speicher navigieren mit BP, (z.B. "mov eax, [ebp - 4](32 Bit = 4 Byte)) und das ist abhängig von der Größe der Datentypen, push und pop sind aber bei Intels maschinenmäßig festgelegt.
Hochsprachen mit Assembleraufrufen übergeben die Parameter über den Stack, aber es ist unterschiedlich, nach welchem Muster, bzw. welcher Reihenfolge.Am besten schaut man sich das wirklich auf einem kariertem Blatt Papier an.
-
Danke für die kurze Erklärung und die Links. Der letzte hilft mir besonders :).
-
Noch ein Beispiel zum Stack wie der funktioniert:
push 1
push 2
push 3------------------------------
Stack:Offset 0012FFB8 3 <-- push 3
Offset 0012FFBC 2 <-- push 2
Offset 0012FFC0 1 <-- push 1
------------------------------pop eax
pop ebx
pop ecx------------------------------
Stack:eax = 3
ebx = 2
ecx = 1
------------------------------