AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RaiseException abfangen

Ein Thema von brechi · begonnen am 12. Aug 2005 · letzter Beitrag vom 12. Aug 2005
Antwort Antwort
Seite 2 von 2     12   
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#11

Re: RaiseException abfangen

  Alt 12. Aug 2005, 15:12
oha liegt daran das ich sysutils nicht eingebunden habe
nimm das mal bitte weg und schau ob es dann noch funktioniert
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#12

Re: RaiseException abfangen

  Alt 12. Aug 2005, 15:19
Eure Testsysteme haben welches OS?

Ich poste gleich das Ergebnis für Delphi 3 und 4 Pro.

@brechi: Sorry, hatte deinen Post übersehen. Die Unit könnte es natürlich auch sein.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

Re: RaiseException abfangen

  Alt 12. Aug 2005, 15:24
Zitat von brechi:
oha liegt daran das ich sysutils nicht eingebunden habe
nimm das mal bitte weg und schau ob es dann noch funktioniert
Mache ich gleich, dauert aber noch einen Moment, mein Delphi ist mir gerade (mal wieder) abgeschmiert...

So, stimmt, ohne SysUtils schmiert er ab - IDE ist direkt beendet, Kommandozeile kommt
Code:
Hier sind wir!
Runtime error 255 at 7C81EB33
Soweit bist du aber wohl schon.

@Olli: XP Prof. SP 2, hab' aber div. VMs, mit denen ich das noch ausprobieren könnte.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#14

Re: RaiseException abfangen

  Alt 12. Aug 2005, 15:24
hab 2k mit Delphi7

mit sysutils gehts, ohne nicht

ne integerdivision fängt der aber ohne probleme auch ohne eingebundene Sysutils ab
folgenden code hab ich im moment:

Delphi-Quellcode:
program Project2;

uses
  windows;

procedure crash_ollydbg;
asm
  pushad
  push offset @@handler
  xor eax, eax
  push fs:[eax]
  mov fs:[eax], esp
  mov ebx, esp
  push eax
  push $73257325
  push esp
  push $5
  push esp
  push $2
  push eax
  push $40010006
  call RaiseException
@@handler:
  mov eax, [esp+$C]
  mov esp, [eax+$A4]
  xor eax, eax
  pop fs:[eax]
  pop eax
  popad
end;

begin
  crash_ollydbg;
  MessageBox(0,'you will never see me with ollydbg attached',nil,0);
end.
dafür nutze ich EBX aus um ESP zu speichern weil das innerhalb von RaiseException bis zur Exception nicht mehr geändert wird un später im Exception Record bzw im Exception Conext auf das alte ESP zeigt damit ich die vorher gepusheten resiger wieder ordentlich füllen kann

dabei ist es mir wichtig das ich RaiseException aufrufen kann und nicht OutputDebugStringA (was das selbe in dem fall wäre)
nur weiß ich nicht pb das überall funtkioniert, da ich nicht garantieren kann das EBX nicht unter 95/98/ME/2k etc. geändert wird

deshalb würd ich am liebsten try except nehmen, aber viewlleicht kenn einer noch eine andere assembler möglichkeit
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#15

Re: RaiseException abfangen

  Alt 12. Aug 2005, 19:48
Zitat von brechi:
dafür nutze ich EBX aus um ESP zu speichern [..]

nur weiß ich nicht pb das überall funtkioniert, da ich nicht garantieren kann das EBX nicht unter 95/98/ME/2k etc. geändert wird
EBX darfst du normalerweise bei Delphi nicht verändern, da Delphi da gewisse sachen drin speichert und nicht erwartet, dass EBX geändert wird.

p.s.: so ist das zumindest bei VCL-anwendungen, wie das bei Konsolenanwendungen ist weiss ich nicht.
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#16

Re: RaiseException abfangen

  Alt 12. Aug 2005, 19:54
ne es geht nur darum obs in RaiseException geändert wird

ich push ja alle register aufn stack und hol sie später zurück
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#17

Re: RaiseException abfangen

  Alt 12. Aug 2005, 20:18
Zitat von BlackJack:
EBX darfst du normalerweise bei Delphi nicht verändern, da Delphi da gewisse sachen drin speichert und nicht erwartet, dass EBX geändert wird.
Dies gilt für OOP-Anwendungen, da in EBX der Self-Zeiger weitergegeben wird. Ist in VC++ glaube ich analog.

Mit Sysutils
D3 fängt in der IDE die Exception ab (IDE) und außerhalb der IDE auch (Programm).
D4 dito

Ohne Sysutils
D3 fängt es in der IDE nicht ab, außerhalb auch nicht
D4 dito

Achso, ebenfalls W2K!
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#18

Re: RaiseException abfangen

  Alt 12. Aug 2005, 20:26
Zitat von Olli:
Zitat von BlackJack:
EBX darfst du normalerweise bei Delphi nicht verändern, da Delphi da gewisse sachen drin speichert und nicht erwartet, dass EBX geändert wird.
Dies gilt für OOP-Anwendungen, da in EBX der Self-Zeiger weitergegeben wird. Ist in VC++ glaube ich analog.
ah, gut zu wissen. kann ich denn dann in procduren, die keine Methoden sind, EBX verändern?
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#19

Re: RaiseException abfangen

  Alt 12. Aug 2005, 23:13
Zitat von BlackJack:
ah, gut zu wissen. kann ich denn dann in procduren, die keine Methoden sind, EBX verändern?
Jain. Ich würde mich nur dann drauf verlassen, wenn die gesamte Funktion in Assembler geschrieben ist - also asm ... end statt begin ... end (als Funktionskörper). Ansonsten kannst du ja nicht wirklich sicher sein was andere aufgerufene Funktionen machen wenn der Compiler fröhlich "optimiert". Der besagte Typ Funktionen wird nämlich nicht nochmal optimiert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 12:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz