Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception variablen/parameter sichern (https://www.delphipraxis.net/88283-exception-variablen-parameter-sichern.html)

Gruber_Hans_12345 13. Mär 2007 08:09


Exception variablen/parameter sichern
 
Wie kann ich im OnException die parameter der aktuellen Funktion auslesen und idealerweise auch noch die variablen ... ?

Die müssten ja alle auf den Stack liegen, ich bräuchte dann ja nur mehr den stackpointer, zu wissen von wo bis wo der bereich geht (Aber der Stackpointer ändert sich ja bei einer exception ... ?) und dann diesen bereich in ein dump file kopieren.

Anschließend brauche ich nur noch eine Möglichkeit diesen speicherbereich auf die variablennamen zu mappen ?

Gibt es da Möglichkeiten für?

sirius 13. Mär 2007 08:22

Re: Exception variablen/parameter sichern
 
Willst du den Zustand beim Eintreten der Exception haben oder vor dem "try"?

marabu 13. Mär 2007 08:26

Re: Exception variablen/parameter sichern
 
Hallo Hans,

vielleicht genügt dir schon der stack dump von madexcept?

Freundliche Grüße

Gruber_Hans_12345 13. Mär 2007 08:49

Re: Exception variablen/parameter sichern
 
Zitat:

Zitat von sirius
Willst du den Zustand beim Eintreten der Exception haben oder vor dem "try"?

eigentlich wäre der zustand beim eintreten der exception ideal ... aber mir würde schon irgendeiner reichen.


madexcept wäre sicher auch ne alternative, aber bis auf den stack, die cpu register und den asm code habe ich auch schon alles.

aber ich vermute das schwierigste wird dann eh noch das mappen des stacks auf die variablen, parameter ...

sirius 13. Mär 2007 09:18

Re: Exception variablen/parameter sichern
 
Beim Eintreten der Exception werden alle Register gerettet. Wenn du in deine Exceptionbehandlung kommst liegt bei [ESP+4] oder [ESP+8] ein Record in dem alle Register stehen.

Edit: bei [ESP+4] (bei [ESP+8] liegt ja der Stackpointer wie er vor dem "try" war) und bei [ESP] liegen die Exception-Informationen (Exception-Code, etc.) in einem Record.
Also bei [ESP+4] sollte ein Pointer auf folgenden Record liegen:
Zitat:

+0 context flags
(used when calling GetThreadContext)
DEBUG REGISTERS
+4 debug register #0
+8 debug register #1
+C debug register #2
+10 debug register #3
+14 debug register #6
+18 debug register #7
FLOATING POINT / MMX registers
+1C ControlWord
+20 StatusWord
+24 TagWord
+28 ErrorOffset
+2C ErrorSelector
+30 DataOffset
+34 DataSelector
+38 FP registers x 8 (10 bytes each)
+88 Cr0NpxState
SEGMENT REGISTERS
+8C gs register
+90 fs register
+94 es register
+98 ds register
ORDINARY REGISTERS
+9C edi register
+A0 esi register
+A4 ebx register
+A8 edx register
+AC ecx register
+B0 eax register
CONTROL REGISTERS
+B4 ebp register
+B8 eip register
+BC cs register
+C0 eflags register
+C4 esp register
+C8 ss register
Infos von hier

Gruber_Hans_12345 13. Mär 2007 09:27

Re: Exception variablen/parameter sichern
 
besten dank, werd mir den artikel mal genauest durchlesen ...

himitsu 13. Mär 2007 09:28

Re: Exception variablen/parameter sichern
 
nicht alles liegt im Stack.

zu Strings, dynamischen Arrays, Objekten und Derartigem liegt z.B. nur ein Pointer dahin eventuell dort, aber es steht nirgendwo, was ein Pointer, oder z.B. ein "normaler" Integer ist.

einige Variablen, wie z.B. nur kurzzetig genutzte Integer liegen aufgrund einer Optimierung einfach nur in den Registern.

....



Also, was genau willst du denn nun bewirken?


Ein Weg, wo man trotz Exception Parameter aus 'ner Funktion rausbekommt, sind Var-Parameter und nicht-lokale Variablen.
Diese werden ja direkt geändert und bleiben dann bei der Exception natürlich im letzten Zustand.

sirius 13. Mär 2007 09:38

Re: Exception variablen/parameter sichern
 
Ja, selber querlesen ist besser als die Infos aus meinem Kopf :mrgreen: Bei solchen Sachen vertue ich mich auch ständig und die richtigen Referenzen finde ich dann einfach indem ich mal durchdebugge :thumb:

Gruber_Hans_12345 13. Mär 2007 09:57

Re: Exception variablen/parameter sichern
 
Zitat:

Zitat von himitsu
nicht alles liegt im Stack.

Also, was genau willst du denn nun bewirken?

ich möchte gerne im falle eines falles (wenn dann doch mal eine exception auftritt) so viele infos wie möglich sammeln, und da wäre es teils extrem hilfreich, wenn man lokale variablen wieder restaurieren könnte (und auch die übergebenen parameter)

das ich bei strings und objekten (einstweilen) nur einen pointer bekomme ist mir mal klar.

sirius 13. Mär 2007 10:02

Re: Exception variablen/parameter sichern
 
Na eigentlich brauchst du dafür nur den EBP (und zwar vor dem "try"). Ist deine funktion reiner Assembler oder ein Pascal-ASM-Mix?
sonst müsstest du noch überprüfen (über EIP) wo der Fehler aufgetreten ist, also ob er innerhalb deiner Funktion...naja, da muss man so einiges testen und probieren...good luck!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr.
Seite 1 von 2  1 2      

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