Wir haben vor kurzem begonnen, madExcept anstelle von ExcMagic als Exception Handler zu verwenden. Wir arbeiten auch an einem 64-Bit-Build unserer App und möchten daher, wenn möglich, die Verwendung von asm-Code eliminieren.Vorteil der Erstellung einer Zugriffsverletzung für Testzwecke mit Asm-Code?
ExcMagic hatte dieses Verfahren, um eine Zugriffsverletzung zu Testzwecken zu erstellen.
procedure CreateAccessViolation
begin
asm
mov eax,11111111h
mov ebx,22222222h
mov ecx,33333333h
mov edx,44444444h
inc dword ptr [eax]
end;
end;
Gibt es einen Vorteil, dass Code verwenden, anstatt nur zu schreiben
raise EAccessViolation.Create('Just testing...');
Es muss einen Grund geben die ExcMagic Entwickler, dass verwendet.
Danke!
Der ursprüngliche Code erzeugt einen tatsächlichen Zugriffsverletzungsfehler auf der Betriebssystemebene und lässt ihn in die RTL übergehen, um in eine EAccessViolation mit einem echten zugewiesenen EXCEPTION_RECORD konvertiert zu werden. Einfaches Öffnen von EAccessViolation ist nicht dasselbe, aber für Testzwecke spielt es wahrscheinlich keine Rolle. Eine einfachere Möglichkeit, ein echtes AV zu verursachen, besteht darin, in ungültigen Speicher zu schreiben, z. B. durch einen Null-Zeiger, und dazu benötigen Sie keinen Assembly-Code, zB: procedure CreateAccessViolation begin PInteger (nil) ^: = 12345; Ende; ' –
@RudyVelthuis korrigiert. Danke! – santiagoIT
Zunächst einmal - diese Gruppe von Anweisungen ist nicht garantiert, um eine Zugriffsverletzung zu erstellen. Es ist nicht undenkbar, dass sich ein beschreibbarer Speicher unter der Adresse $ 11111111 befindet. Ein NIL-Pointer write erzeugt immer eine Zugriffsverletzung. Davon abgesehen ist diese bestimmte Zugriffsverletzung sehr leicht als die absichtlich erstellte zu erkennen, was möglicherweise der Grund für diese spezielle Gruppe von Anweisungen ist. – HeartWare