Stack Assembler?


24.07.2023, 12:02

eax ist 4 Byte breit

2 Antworten

Der Stack wächst auf x86-Architekturen von höheren Adressen zu niederigeren Adressen. Bei jedem push wird daher esp um die Anzahl Bytes verringert, welche das Argument von push belegt, also 4 Bytes bei einem "push eax" / 32 Bit Register. Daher müsste esp nach dem zweiten push, sofern angenommen wird, dass die Adressen in der Speicheranzeige-Box von oben nach unten zunehmen, dort zu liegen kommen, wo "..." eingezeichnet ist.

Die LE Darstellung von den gepushten Registern müsste 11 47 00 00 resp. 15 08 00 00 lauten (abweichend von Deiner Darstellung).

Die Antwort wird keine andere, nur weil Du die Frage nochmal stellst.

Die Vorgabe ist hier bereits falsch, da bei x86 der Stackpointer TOS ist, also auf das zuletzt gepushte (d)word zeigt. (Genaugenommen auf die Adresse des LSB des [d]word)

Ferner sollst Du in die Boxen die einzelnen Bytes (zwei Hexadezstellen) reinschreiben, nicht die Worte der Push-Operation.

  Addr.    |   Val
-----------+----------
   ...08   |   ....  <= ESP (vor dem ersten Push
   ...07   |   00
   ...06   |   00
   ...05   |   47
   ...04   |   11
   ...03   |   00
   ...02   |   00
   ...01   |   08
   ...00   |   15    <== ESP (nach dem 2. Push)