Thema: Delphi AV bei Assemblercode

Einzelnen Beitrag anzeigen

Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

AV bei Assemblercode

  Alt 5. Aug 2006, 00:33
Morgen.

Ich habe mir gerade folgende Funktion geschrieben, um zwei Records zu vergleichen:
Delphi-Quellcode:
function cmpinfoboxcontentelements
  (const e1, e2: TChemInfoBoxContentElement): Integer;
  asm
              mov eax, dword ptr e1.shown
              mov edx, eax
              xor eax, dword ptr e2.shown
              jz @cmporder //Überprüfe ob die shown-Werte unterschiedlich sind
              and eax, eax //Wenn ja, dann überprüfe ob bei e1 shown=true oder bei e2
              jz @putn1
              mov eax, 1 //Wenn bei e1 shown=true, dann ist Ergebnis 1
              jmp @exit
  @putn1: mov eax, -1 //Wenn bei e2, dann -1
              jmp @exit
  @cmporder: mov eax, e1.order //Überprüfe die Reihenfolgen - und hier knallts auch
              mov edx, e2.order
              sub eax, edx //Ziehe e2.order von e1.order ab
              js @islower //Wenn negativ, springe zu islower und Ergebnis=-1
              jnz @isgreater //Wenn nicht 0 (d.h. wenn größer 0) dann Ergebnis=1
              mov eax, 0 //Ansonsten Ergebnis=0
              jmp @exit
  @islower: mov eax, -1
              jmp @exit
  @isgreater: mov eax, 1
  @exit:
  end;
An dem mov eax, e1.order knallts - Zugriffsverletzung. Warum? Mein record sieht so aus:
Delphi-Quellcode:
  TChemInfoBoxContentElement=record
    Title: String[20];
    FormatStr: String[10];
    TypeKind: TTypeKind;
    ByteOffset, Size: Integer;
    Order, HeightNeeded: Integer;
    Shown: Boolean;
  end;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat