struct UNWIND_INFO
Struktura info odkręcanie danych jest używana do rejestrowania zmian spowodowanych przez funkcję ma na wskaźnik stosu i gdzie nieulotna rejestrów, które są zapisywane na stosie:
UBYTE: 3 |
Wersja |
UBYTE: 5 |
Flagi |
UBYTE |
Rozmiar prologu |
UBYTE |
Liczba kodów odkręcanie |
UBYTE: 4 |
Rejestr ramki |
UBYTE: 4 |
Przesunięcie rejestru ramki (skalowane) |
USHORT * n |
Odkręcanie tablica kodów |
Zmienna |
Albo można formularza (1) lub (2) poniżej |
(1) Procedury obsługi wyjątków
ULONG |
Adres procedury obsługi wyjątków |
Zmienna |
Danych obsługi języka (opcjonalnie) |
(2) Powiązane odkręcanie Info
ULONG |
Funkcja adres początkowy |
ULONG |
Funkcja adres końcowy |
ULONG |
Odkręcanie adres info |
Struktura UNWIND_INFO musi być typu DWORD wyrównane w pamięci.Znaczenie każdego pola jest następująca:
Wersja
Numer wersji danych odkręcanie, aktualnie 1.Flagi
Trzy flagi są aktualnie zdefiniowane:UNW_FLAG_EHANDLER funkcja ma procedury obsługi wyjątków, która powinna zostać wywołana przy poszukiwaniu funkcje, które trzeba będzie przejrzeć wyjątki.
Funkcja używa procedury obsługi sytuacji krańcowych, która powinna być wywoływana po odkręcaniu wyjątek UNW_FLAG_UHANDLER.
UNW_FLAG_CHAININFO to odkręcanie info struktura nie jest głównemu procedurą.Zamiast tego łańcuchowej odkręcanie info, że zapis jest zawartość poprzedni wpis RUNTIME_FUNCTION.Zobacz następujący tekst, aby uzyskać wyjaśnienie powiązane odkręcanie struktur info.Jeśli ta flaga jest ustawiona, można wyczyścić flagi UNW_FLAG_EHANDLER i UNW_FLAG_UHANDLER.Ponadto ramki rejestru-stack alokacji pola i musi mieć te same wartości jak w podstawowym odkręcanie info.
Rozmiar prologu
Długość prologu funkcji w bajtach.Liczba kodów odkręcanie
Jest to liczba gniazd w odkręcanie tablica kodów.Uwaga, że odkręcanie niektóre kody (na przykład UWOP_SAVE_NONVOL) wymagają więcej niż jedno gniazdo w tablicy.Rejestr ramki
Jeśli jest niezerowa, następnie funkcja wykorzystuje wskaźnika klatki, a to pole jest numer telefonu z nieulotną pamięcią rejestru, używane jako wskaźnika klatki, przy użyciu tego samego kodowania dla pola info operacji węzłów UNWIND_CODE.Ramka zarejestrować przesunięcie (skalowane)
Jeśli pola rejestru ramki jest różna od zera, to przesunięcie skalowane od RSP zastosowanego do FP reg, gdy zostało ustalone.Rzeczywiste reg FP ustawiono RSP + 16 * tego numeru, dzięki czemu przesunięcia od 0 do 240.Pozwala to na, wskazując FP reg w środku alokacja lokalnego stosu dla ramek stosu dynamiczne, co pozwala lepiej gęstości kodu przez krótszy instrukcje (więcej instrukcji można użyć przesunięcia formularz podpisany 8-bitowa).Odkręcanie tablica kodów
Jest to szereg elementów, który wyjaśnia efekt prologu na nieulotna rejestrów i RSP.Zobacz sekcję na UNWIND_CODE, dla których znaczenie poszczególnych elementów.Do celów dostosowania tej tablicy zawsze mają parzystą liczbę wpisów, z ostatnim wpisem potencjalnie nieużywane (w którym to przypadku tablicy będzie być dłuższe niż określona przez liczbę odkręcanie kody pól).Adres procedury obsługi wyjątków
(Jeśli flaga UNW_FLAG_CHAININFO jest jasne i znajduje się jedną z flag, UNW_FLAG_EHANDLER lub UNW_FLAG_UHANDLER) jest wskaźnik obrazu względem obsługi języka wyjątek/zakończenie obu funkcji.Danych obsługi języka
Jest to wartość funkcji języka procedury obsługi wyjątku.Format tych danych jest nie określono tego parametru i całkowicie określona przez program obsługi wyjątku określonego w użyciu.Powiązane odkręcanie Info
Jeśli jest ustawiona flaga UNW_FLAG_CHAININFO struktury UNWIND_INFO kończy się z trzech UWORDs.UWORDs te reprezentują informacje o RUNTIME_FUNCTION dla funkcji łańcuchowej odkręcanie.