Sdílet prostřednictvím


IDiaFrameData

Zveřejňuje podrobnosti rámce zásobníku.

Syntaxe

IDiaFrameData : IUnknown

Metody v pořadí Vtable

Následující tabulka ukazuje metody IDiaFrameData.

metoda Popis
IDiaFrameData::get_addressSection Načte část části adresy kódu pro rámec.
IDiaFrameData::get_addressOffset Načte posun části adresy kódu pro rámec.
IDiaFrameData::get_relativeVirtualAddress Načte relativní virtuální adresu (RVA) obrázku kódu rámce.
IDiaFrameData::get_virtualAddress Načte virtuální adresu (VA) kódu rámce.
IDiaFrameData::get_lengthBlock Načte délku bloku kódu popsaného rámcem v bajtech.
IDiaFrameData::get_lengthLocals Načte počet bajtů místních proměnných nasdílených do zásobníku.
IDiaFrameData::get_lengthParams Načte počet bajtů parametrů nasdílených do zásobníku.
IDiaFrameData::get_maxStack Načte maximální počet bajtů nasdílených do zásobníku v rámci.
IDiaFrameData::get_lengthProlog Načte počet bajtů prologue kódu v bloku.
IDiaFrameData::get_lengthSavedRegisters Načte počet bajtů uložených registrů nasdílených do zásobníku.
IDiaFrameData::get_program Načte řetězec programu, který se používá k výpočtu sady registru před voláním aktuální funkce.
IDiaFrameData::get_systemExceptionHandling Načte příznak, který označuje, že zpracování výjimek systému je v platnosti.
IDiaFrameData::get_cplusplusExceptionHandling Načte příznak, který označuje, že zpracování výjimek jazyka C++ je v platnosti.
IDiaFrameData::get_functionStart Načte příznak, který označuje, že blok obsahuje vstupní bod funkce.
IDiaFrameData::get_allocatesBasePointer Načte příznak, který označuje, že základní ukazatel je přidělen pro kód v tomto rozsahu adres. Tato metoda je zastaralá.
IDiaFrameData::get_type Načte typ rámce specifického pro kompilátor.
IDiaFrameData::get_functionParent Načte datové rozhraní rámce pro uzavření funkce.
IDiaFrameData::execute Provede odvíjení zásobníku a vrátí aktuální stav registrů v rozhraní rámce chůze zásobníku.

Poznámky

Podrobnosti dostupné pro rámec jsou určené pro body provádění v rozsahu adres označeném adresou a délkou bloku.

Poznámky pro volající

Získejte toto rozhraní voláním metody IDiaEnumFrameData::Next nebo IDiaEnumFrameData::Item . Podrobnosti najdete v rozhraní IDiaEnumFrameData .

Příklad

Tento příklad vytiskne vlastnosti objektu IDiaFrameData . Příklad získání rozhraní najdete v rozhraní IDiaFrameData IDiaEnumFrameData.

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");
        }
    }
}

Požadavky

Hlavička: Dia2.h

Knihovna: diaguids.lib

DLL: msdia80.dll

Viz také