Einzelnen Beitrag anzeigen

Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#91

Re: RUTIS Engine (Scripting) [WinCE spinnt]

  Alt 7. Mai 2010, 14:23
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
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat