Einzelnen Beitrag anzeigen

Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Inline Assembler Adressierungsproblem

  Alt 21. Mär 2007, 22:43
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ß?
  Mit Zitat antworten Zitat