Stack Größe
-
Hallo an alle,
ich würde gerne die Größe ermitteln, die eine Funktion (in der der _asm-Code aufgerufen wird) auf dem Stack verbraucht; insbesondere deren Parameter.
Ich denke mit assembler-code sollte sich dies am geschicktesten lösen lassen, wenn auch gleich mir keine passende Lösung einfällt.
Für jede Hilfe bin ich dankbar.
Ansonsten wünsche ich noch einen erholsamen Abend und schon mal ein schönes Wochenende.
-
Hallo,
Sollte eigentlich kein Problem sein, man kann ja mit den Registern recht gut den Call-Stack anschauen:
mov edx, [ebp] mov eax, [edx] sub eax, edx
Dieser Code gibt dir die Differenz der Base Pointer vom Aufrufer des Aufrufers deiner Funktion und dem Aufrufer deiner Funktion zurück, was schon mal ziemlich gut ist-- du kannst es ja verändern, damit es exakt das tut, was du willst. Aber ich muss dich warnen: Je nach Compiler und Einstellungen können ziemlich eigenartige Werte auftauchen. Frame Pointer Omitting und Inlining können die Ursache sein
Nu noch einen Link auf eine Seite, wo das Wichtigste erklärt wird
-
Erst einmal vielen Dank für deine Antwort.
Ich habe mir auch die verlinkte Seite dazu angeschaut. Nochmal zum Verständnis:
In esp befindet sich der Stack-Pointer meines Programms, während sich im ebp-Register der Stack-Pointer der Funktion befindet. Die Differenz zwischen esp und ebp, ist somit die Größe (in Bytes?) des von meiner Funktion belegten Platzes auf dem Stack.Irgendwie bekomme ich eine recht merkwürdige Zahl rück. Ich hätte das an der Stelle jetzt so implementiert:
DWORD GetStackSize(void) { _asm { mov edx, [ebp] mov eax, [edx] sub eax, edx } }
Gut, jetzt würde ich wahrscheinlich die Größe der Funktion GetStackSize zurückbekommen, schon klar, aber ...
Kann mir jemand dass noch mal (etwas) weitergehend erklären?