Also das ist der Befehl, wie er im Delphi-Disassembler angezeigt wurde.
EAX enthält dabei die Adresse im Stack, die von einer Funktion vorher ermittelt wurde und ESI den Wert, der da hin geschrieben werden soll.
Das ganze sieht im Delphi-Code so aus:
Delphi-Quellcode:
Procedure TRutisStack.PushCardinal(Val : Cardinal);
Begin
PCardinal(Data[Push(4)])^ := Val;
End;
Push gibt als Result die Stack-Adresse (von 0 an gezählt) zurück und
die Array-property Data gibt zu einer Stack-Adresse die absolute Adresse als Pointer zurück.
Der gesamte
ASM Code sieht dann so aus:
Code:
Rutis_Defs.pas.1628: Begin
00493D48 53 push ebx
00493D49 56 push esi
00493D4A 8BF2 mov esi,edx
00493D4C 8BD8 mov ebx,eax
Rutis_Defs.pas.1629: PCardinal(Data[Push(4)])^ := Val;
00493D4E 33C9 xor ecx,ecx
00493D50 BA04000000 mov edx,$00000004
00493D55 8BC3 mov eax,ebx
00493D57 E804FCFFFF call TRutisStack.Push
00493D5C 8BD0 mov edx,eax
00493D5E 8BC3 mov eax,ebx
00493D60 E887F2FFFF call TRutisStack.GetData
00493D65 8930 mov [eax],esi
Rutis_Defs.pas.1630: End;
00493D67 5E pop esi
00493D68 5B pop ebx
00493D69 C3 ret
MFG