Verwenden Sie dieses Beispiel aus Wikipedia, in dem DrawSquare () DrawLine () aufruft.
(Beachten Sie, dass dieses Diagramm unten hohe Adressen und oben niedrige Adressen enthält.)
Könnte mir jemand erklären was ebp
und esp
in diesem Zusammenhang sind?
Nach allem, was ich sehe, würde der Stapelzeiger immer auf den oberen Rand des Stapels und der Basiszeiger auf den Anfang der aktuellen Funktion zeigen. Oder was?
edit: Ich meine das im Kontext von Windows-Programmen
edit2: Und wie funktioniert das eip
auch?
edit3: Ich habe den folgenden Code von MSVC ++:
var_C= dword ptr -0Ch
var_8= dword ptr -8
var_4= dword ptr -4
hInstance= dword ptr 8
hPrevInstance= dword ptr 0Ch
lpCmdLine= dword ptr 10h
nShowCmd= dword ptr 14h
Alle scheinen Dwords zu sein und benötigen jeweils 4 Bytes. Ich kann also sehen, dass es eine Lücke von hInstance zu var_4 von 4 Bytes gibt. Was sind Sie? Ich nehme an, es ist die Absenderadresse, wie auf dem Bild von Wikipedia zu sehen ist.
(Anmerkung des Herausgebers: Ein langes Zitat aus Michaels Antwort wurde entfernt, das nicht in die Frage gehört, aber eine Folgefrage wurde in bearbeitet.):
Dies liegt daran, dass der Ablauf des Funktionsaufrufs wie folgt ist:
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
Meine Frage (zuletzt hoffe ich!) Ist nun, was genau passiert, sobald ich die Argumente der Funktion, die ich aufrufen möchte, bis zum Ende des Prologs platziere. Ich möchte wissen, wie sich das Ebbe, insbesondere in diesen Momenten entwickelt (ich habe bereits verstanden, wie der Prolog funktioniert, ich möchte nur wissen, was passiert, nachdem ich die Argumente auf den Stapel geschoben habe und vor dem Prolog).