AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Abfangen von Betriebssystemexceptions
Thema durchsuchen
Ansicht
Themen-Optionen

Abfangen von Betriebssystemexceptions

Ein Thema von Lemmy1 · begonnen am 3. Nov 2005 · letzter Beitrag vom 5. Nov 2005
 
Benutzerbild von Lemmy1
Lemmy1

Registriert seit: 28. Nov 2004
Ort: Ismaning
184 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Exceptionhandling wie in C++ möglich?

  Alt 3. Nov 2005, 18:59
Hab gerade selber etwas in der Delphipraxis zu einem ganz anderen Thema etwas gefunden. Bin mal so frei und kopier das einfach so raus:

Delphi-Quellcode:
function IsObject(AObject: Pointer): Boolean;
asm
      OR EAX,EAX // AObject == nil ??
      JNZ @@1
      RET

@@1: XOR EDX,EDX // install Exception Frame, SEH
      PUSH OFFSET @@3
      PUSH DWord Ptr FS:[EDX]
      MOV FS:[EDX],ESP
     
      MOV EAX,[EAX] // EAX := AObject^.ClassType
      OR EAX,EAX // ClassType == nil ??
      JZ @@2

      CMP EAX,[EAX].vmtSelfPtr // EAX = ClassType.vmtSelfPtr
      SETZ AL

@@2: POP DWord Ptr FS:[EDX]
      POP EDX
      RET

// Exception Handler, wird aufgerufen wenn zwischen @@1 und @@2 eine AV auftritt,
// zum Debugger muß auf @@3 ein Breakpoint gesetzt werden,
// Dieser SEH ist NICHT sichtbar für Delphi's Debugger !!

@@3: MOV EAX,[ESP + 00Ch] // context
      MOV DWord Ptr [EAX + 0B0h],0 // context.eax = 0
      MOV DWord Ptr [EAX + 0B8h],OFFSET @@2 // context.eip = @@2
      SUB EAX,EAX // 0 = ExceptionContinueExecution
end;
Also mit ASM scheints ja möglich zu sein. Werde mal versuchen, ob man sowas komfortabel und sauber kapseln kann. Wenn ja, lad ich den entsprechenden Code hoch.

Grüße
Daniel
Daniel
www.nemu.com - The N64 Emulator
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz