Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
Turbo Delphi für Win32
|
AV bei Assemblercode
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
|
|
Zitat
|