Verkettete Entladeinfostrukturen

Wenn das UNW_FLAG_CHAININFO-Flag festgelegt wird, dann ist eine Entladeinfostruktur eine sekundäre Struktur, und das gemeinsame Adressfeld für Ausnahmehandler/Verkettungsinformationn enthält die primären Entladeinformationen.Im folgenden Code werden die primären Entladeinformationen abgerufen, unter der Annahme, dass unwindInfo die Struktur ist, für die das UNW_FLAG_CHAININFO-Flag festgelegt wurde.

PRUNTIME_FUNCTION primaryUwindInfo = (PRUNTIME_FUNCTION)&(unwindInfo->UnwindCode[( unwindInfo->CountOfCodes + 1 ) & ~1]);

Verkettungsinformationen sind in zwei Situationen hilfreich.Zunächst können sie für nicht zusammenhängende Codesegmente verwendet werden.Durch Verwendung von Verkettungsinformationen kann die Größe der erforderlichen Entladeinformationen verringert werden, da das Entladecode-Array aus den primären Entladeinformationen nicht dupliziert werden muss.

Sie können auch verkettete Infos verwenden, um flüchtige Registerspeicherungen zu gruppieren.Vom Compiler wird möglicherweise eine Verzögerung der Speicherung flüchtiger Register veranlasst, bis der Funktionseintragsprolog verlassen wurde.Dies kann aufgezeichnet werden, indem primäre Entladeinformationen für den Teil der Funktion, der sich vor dem gruppierten Code befindet, verwendet werden. Die Verkettungsinformationen werden dann mit einem Prolog mit einer Länge ungleich 0 (Null) eingerichtet, wobei die Entladecodes in den Verkettungsinformationen die Speicherungen der nicht flüchtigen Register wiedergeben.In diesem Fall sind die Entladecodes sämtlich Instanzen von UWOP_SAVE_NONVOL.Gruppierend speichert das nicht flüchtige Register, indem ein PUSH verwendet oder ändert das RSP-Register, indem eine zusätzliche feste Stapelreservierungsgröße verwendet, wird nicht unterstützt.

Ein UNWIND_INFO-Element, bei dem UNW_FLAG_CHAININFO festgelegt ist, kann einen RUNTIME_FUNCTION-Eintrag enthalten, bei dessen UNWIND_INFO-Element UNW_FLAG_CHAININFO ebenfalls festgelegt ist (mehrfache Komprimierung).Die Verweise der verketteten Entladeinformationszeiger erreichen schließlich ein UNWIND_INFO-Element mit deaktiviertem UNW_FLAG_CHAININFO; dies ist das primäre UNWIND_INFO-Element, das auf den tatsächlichen Einstiegspunkt der Prozedur verweist.

Siehe auch

Referenz

Entladedaten für die Ausnahmebehandlung, Debuggerunterstützung