SEH aus Sicht des Betriebssystems

17/03/2009 - 23:10 von Hubert Seidel | Report spam
Hallo NG,

kennt hier jemand zufàllig gute Literatur zum Thema SEH
"Structured Exception Handling" aus Sicht des Betriebssystems (Deutsch)?
Ich beschàftige mich seit geraumer Zeit mit try/finally/end
und try/except/end-Blöcke bei Delphi/C++, jedoch habe ich
es offensichtlich immer noch nicht so begriffen, das ich
es geschafft habe eine Exception selber abzuwickeln :( *,**)

mfg.
Herby

*) Auch die Quellen von Wine brachten mir keine Erlàuchtung!
**) Es geht mir darum wie das OS Exceptions mit FS abwickelt

http://www.hubert-seidel.eu
 

Lesen sie die antworten

#1 Jan Seiffert
18/03/2009 - 01:51 | Warnen spam
Hubert Seidel wrote:
Hallo NG,

kennt hier jemand zufàllig gute Literatur zum Thema SEH
"Structured Exception Handling" aus Sicht des Betriebssystems (Deutsch)?
Ich beschàftige mich seit geraumer Zeit mit try/finally/end
und try/except/end-Blöcke bei Delphi/C++, jedoch habe ich
es offensichtlich immer noch nicht so begriffen, das ich
es geschafft habe eine Exception selber abzuwickeln :( *,**)




SEH sind noch was anderes als die exceptions die moderne Sprachen so mit
bringen, wobei natuerlich eine Sprachimplementation ihre exceptions auf SEH
aufbauen darf.

mfg.
Herby

*) Auch die Quellen von Wine brachten mir keine Erlàuchtung!
**) Es geht mir darum wie das OS Exceptions mit FS abwickelt




Der Zugriff ueber das FS-Segment ist um Thread-Local-Storage anzusprechen. So
hat jeder Thread seine SEH variable.
Zumindest wenn ich da in den Wine Source sehe, sieht mir das so aus als wenn die
eine einfach verkette Liste in der Variable aufbewahren, die wie ein Stack
benutzt wird.
Beim eintritt in den try-bereich wird ein "spezieller" Frame zu diesem Thread
lokalen Fehlerstack hinzugefuegt (push), beim verlassen des Bereiches wird er
wieder entfernt (pop).
Der Trick ist jetzt nur noch "im Fehlerfalle" diesen Fehlerstack aufzuribbeln,
ob sich jemand fuer die Exception zustaendig fuehlt.
Dafuer muss man natuerlich erstemal den Fehler zu fassen bekommen entweder
direkt (throw), oder die haerteren (SIGSEGV) ueber Signale. Aus dem
Signalhandler kann man dann mit siglongjmp zum mit sigsetjmp gespeicherten
"echten stackframe" springen und dann einen callback aufrufen.

Ubuntu: ancient african word meaning "can't install Debian".

Ähnliche fragen