Aracılığıyla paylaş


UNWIND_INFO yapısı

Geriye doğru izleme veri bilgisi yapısı, bir işlevin yığın işaretçisindeki etkilerini ve yığında kayıtlı kalıcı yazmaçların bulunduğu işlevleri kaydetmek için kullanır:

UBYTE: 3

Sürüm

UBYTE: 5

Flags

UBYTE

Giriş bölümü boyutu

UBYTE

Bırakma kodlarının sayımı

UBYTE: 4

Çerçeve Kaydı

UBYTE: 4

Çerçeve Kaydı uzaklığı (ölçekli)

USHORT * n

Bırakma kodları dizisi

değişken

Aşağıdaki (1) veya (2) formundan olabilir

(1) Özel Durum İşleyicisi

ULONG

Özel durum işleyici adresi

değişken

Dile özgü işleyici verisi (isteğe bağlı)

(2) Zincirleme Bırakma Bilgisi

ULONG

İşlev başlangıç adresi

ULONG

İşlev bitiş adresi

ULONG

Bırakma bilgisi adresi

UNWIND_INFO yapısı, bellekte DWORD hizalanmış olmalıdır. Her alanın anlamı aşağıdaki gibidir:

  • Sürüm
    Bırakma verisinin, şu anda 1, sürüm numarası.

  • Flags
    Şu an için üç bayrak tanımlanmıştır:

    UNW_FLAG_EHANDLER İşlev, özel durumları incelemesi gereken işlevleri ararken çağırılabilen bir özel durum işleyicisine sahiptir.

    UNW_FLAG_UHANDLER Bu işlev, bir özel durumu bırakırken çağırılması gereken bir sonlandırma işleyicisine sahiptir.

    UNW_FLAG_CHAININFO Bu bırakma bilgisi yapısı yordam için birincil olan değildir. Zincirleme bırakma bilgisi girdisi önceki bir RUNTIME_FUNCTION girdisinin içeriğidir. Zincirli geriye doğru izleme bilgi yapılarının açıklaması için aşağıdaki metne bakın. Bu bayrak ayarlanırsa, ardından UNW_FLAG_EHANDLER ve UNW_FLAG_UHANDLER bayraklarının temizlenmiş olması gerekir. Ayrıca çerçeve kayıt ve sabit-yığın ayırma alanları, ilk bırakma bilgilerindeki değerlerle aynı değerlere sahip olmalıdır.

  • Giriş bölümü boyutu
    İşlev giriş bölümünün bit türünden uzunluğu.

  • Bırakma kodlarının sayımı
    Bu, bırakma kodları dizisindeki yuva sayısıdır. Bazı geriye doğru izleme kodlarının (örneğin UWOP_SAVE_NONVOL) dizide birden fazla yuva gerektirdiğini unutmayın.

  • Çerçeve kaydı
    Sıfırdan farklıysa, işlev bir çerçeve işaretçisini kullanır ve bu alan, UNWIND_CODE düğümlerinin işlem bilgi alanıyla aynı kodlamayı kullanan, çerçeve işaretçisi olarak kullanılan kalıcı kayıt sayısıdır.

  • Çerçeve kaydı uzaklığı (ölçekli)
    Çerçeve yazmaç alanı sıfır değilse, bu, oluşturulduğunda FP reg'e uygulanan RSP'deki ölçeklendirilmiş sapmadır. Gerçek FP reg RSP + 16 * bu sayı'ya ayarlanır ve 0'dan 240'a kadar uzaklıklara izin verir. Bu, FP reg'i dinamik yığın çerçevesine ait yerel yığın yüklemesinin ortasına çevirmeye yardımcı olur ve böylece daha kısa yönergelerle daha iyi kod yoğunluğu sağlar (daha fazla yönerge 8-bit imzalanmış sapma formu gerektirebilir).

  • Bırakma kodları dizisi
    Bu, giriş bölümünün kalıcı yazmaçlar ve RSP üzerindeki etkisini açıklayan bir öğe dizisidir. Öğelerin tek tek anlamları için UNWIND_CODE hakkındaki bölüme bakın. Düzenleme amaçlı olarak, bu dizi, en son girişi potansiyel olarak kullanılmamış biçimde, her zaman eşit sayıda girişe sahip olacaktır (bu durumda, dizi bırakma kodları alanının sayımı ile gösterilenden bir tane daha uzun olacaktır).

  • Özel durum işleyici adresi
    Bu işlevin dile özgü özel durum/sonlandırma işleyicisine yönelik bir resim göreli işaretçidir (UNW_FLAG_CHAININFO bayrağı temiz ve UNW_FLAG_EHANDLER veya UNW_FLAG_UHANDLER bayraklarından biri ayarlanmışsa).

  • Dile özel işleyici verileri
    Bu, işlevin dile özgü özel durum işleyicisi verisidir. Bu verinin biçimi belirtilmemiştir ve tamamen kullanımındaki belirli özel durum işleyici tarafından belirlenir.

  • Zincirleme Bırakma Bilgisi
    Bayrak UNW_FLAG_CHAININFO ayarlanmışsa, UNWIND_INFO yapısı üç UWORDs ile sona erer. Bu UWORD öğeleri geriye doğru zincirleme işlevine ilişkin RUNTIME_FUNCTION bilgilerini temsil eder.

Ayrıca bkz.

Başvuru

Özel Durum İşleme için Bırakma Verisi, Hata Ayıklayıcı Desteği