Hallo,
ich möchte mit dem Inline-Assembler auf ein dynamisches Array zuzugreifen,
aber offensichtlich macht es einen Unterschied wo das Array deklariert bzw.
ob es dynamisch deklariert ist.
So funktioniert es:
Delphi-Quellcode:
procedure Test;
var
Feld:
array of DWord;
begin
SetLength(Feld, 5);
asm
MOV EAX, Feld;
//Adresse von Feld nach EAX kopieren
MOV EDX, 7d;
//7 nach EDX
MOV [EAX], EDX;
//DWord an Adresse von Feld mit 7 überschreiben
end;
end;
Dieser Code schreibt eine 7 in das erste von 5 DWords.
So funktioniert es nicht (Speicherschutzverletzung):
Delphi-Quellcode:
type
TTest =
class(TObject)
private
FFeld:
array of DWord;
public
constructor Create;
end;
constructor TTest.Create;
begin
SetLength(FFeld, 5);
asm
MOV EAX, FFeld;
//Hier scheint nur der Offset von FFeld in EAX zu landen
MOV EDX, 7d;
MOV [EAX], EDX;
//Speicherschutzverletzung...
end;
end;
Weiß jemand wie im Assembler die Adresse in diesem Fall ermittelt werden muß?