Aracılığıyla paylaş


IDiaFrameData

Yığın çerçevesinin ayrıntılarını gösterir.

Sözdizimi

IDiaFrameData : IUnknown

Vtable Sırasına Göre Yöntemler

Aşağıdaki tabloda yönteminin yöntemleri gösterilmektedir IDiaFrameData.

Metot Açıklama
IDiaFrameData::get_addressSection Çerçevenin kod adresinin bölüm bölümünü alır.
IDiaFrameData::get_addressOffset Çerçeve için kod adresinin uzaklık bölümünü alır.
IDiaFrameData::get_relativeVirtualAddress Çerçeve kodunun görüntü göreli sanal adresini (RVA) alır.
IDiaFrameData::get_virtualAddress Çerçeve kodunun sanal adresini (VA) alır.
IDiaFrameData::get_lengthBlock Çerçeve tarafından açıklanan kod bloğunun uzunluğunu bayt cinsinden alır.
IDiaFrameData::get_lengthLocals Yığına gönderilen yerel değişkenlerin bayt sayısını alır.
IDiaFrameData::get_lengthParams Yığına gönderilen parametrelerin bayt sayısını alır.
IDiaFrameData::get_maxStack Çerçevedeki yığına gönderilen en fazla bayt sayısını alır.
IDiaFrameData::get_lengthProlog Bloktaki prologue kodunun bayt sayısını alır.
IDiaFrameData::get_lengthSavedRegisters Yığına gönderilen kayıtlı yazmaçların bayt sayısını alır.
IDiaFrameData::get_program Geçerli işlev çağrısından önce yazmaç kümesini hesaplamak için kullanılan program dizesini alır.
IDiaFrameData::get_systemExceptionHandling Sistem özel durum işlemenin etkin olduğunu belirten bir bayrak alır.
IDiaFrameData::get_cplusplusExceptionHandling C++ özel durum işlemenin etkin olduğunu belirten bir bayrak alır.
IDiaFrameData::get_functionStart Bloğun bir işlevin giriş noktasını içerdiğini belirten bir bayrak alır.
IDiaFrameData::get_allocatesBasePointer Temel işaretçinin bu adres aralığındaki kod için ayrıldığını gösteren bir bayrak alır. Bu yöntem kullanım dışıdır.
IDiaFrameData::get_type Derleyiciye özgü çerçeve türünü alır.
IDiaFrameData::get_functionParent kapsayan işlev için çerçeve veri arabirimini alır.
IDiaFrameData::execute Yığın geri sarmayı gerçekleştirir ve bir yığın yürüyüş çerçevesi arabirimindeki yazmaçların geçerli durumunu döndürür.

Açıklamalar

Bir çerçeve için kullanılabilen ayrıntılar, adres ve blok uzunluğuyla belirtilen adres aralığındaki yürütme noktalarına yöneliktir.

Arayanlar İçin Notlar

IDiaEnumFrameData::Next veya IDiaEnumFrameData::Item yöntemlerini çağırarak bu arabirimi alın. Ayrıntılar için IDiaEnumFrameData arabirimine bakın.

Örnek

Bu örnek, bir IDiaFrameData nesnenin özelliklerini yazdırır. Arabirimin nasıl elde olduğuna ilişkin bir örnek için IDiaEnumFrameData arabirimine IDiaFrameData bakın.

void PrintFrameData(IDiaFrameData* pFrameData){
    DWORD dwSect;
    DWORD dwOffset;
    DWORD cbBlock;
    DWORD cbLocals; // Number of bytes reserved for the function locals
    DWORD cbParams; // Number of bytes reserved for the function arguments
    DWORD cbMaxStack;
    DWORD cbProlog;
    DWORD cbSavedRegs;
    BOOL  bSEH;
    BOOL  bEH;
    BOOL  bStart;
    BSTR  wszProgram;

    if(pFrameData->get_addressSection(&dwSect) == S_OK &&
       pFrameData->get_addressOffset(&dwOffset) == S_OK &&
       pFrameData->get_lengthBlock(&cbBlock) == S_OK &&
       pFrameData->get_lengthLocals(&cbLocals) == S_OK &&
       pFrameData->get_lengthParams(&cbParams) == S_OK &&
       pFrameData->get_maxStack(&cbMaxStack) == S_OK &&
       pFrameData->get_lengthProlog(&cbProlog) == S_OK &&
       pFrameData->get_lengthSavedRegisters(&cbSavedRegs) == S_OK &&
       pFrameData->get_systemExceptionHandling(&bSEH) == S_OK &&
       pFrameData->get_cplusplusExceptionHandling(&bEH) == S_OK &&
       pFrameData->get_functionStart(&bStart) == S_OK )
    {
        wprintf(L"Frame address  : %04X:%08X\n", dwSect, dwOffset);
        wprintf(L"Block size     : 0x%8X\n", cbBlock);
        wprintf(L"Locals size    : 0x%8X\n", cbLocals);
        wprintf(L"Parms size     : 0x%8X\n", cbParams);
        wprintf(L"Max stack used : 0x%8X\n", cbMaxStack);
        wprintf(L"Prolog size    : 0x%8X\n", cbProlog);
        wprintf(L"Saved regs size: 0x%8X\n", cbSavedRegs);
        wprintf(L"System Exception Handling: %c\n", bSEH ? L'Y' : L'N');
        wprintf(L"C++ Exception Handling   : %c\n", bEH ? L'Y' : L'N');
        wprintf(L"Function starts in block : %c\n", bStart ? L'Y' : L'N');

        if (pFrameData->get_program(&wszProgram) == S_OK)
        {
            wprintf(L"Program used for register set: %s\n", wszProgram);
            SysFreeString(wszProgram);
        }
        else
        {
            wprintf(L"\n");
        }
    }
}

Gereksinimler

Üst bilgi: Dia2.h

Kitaplık: diaguids.lib

DLL: msdia80.dll

Ayrıca bkz.