Compartilhar via


IDiaFrameData

Expõe os detalhes de um registro de ativação.

Syntax

IDiaFrameData : IUnknown

Métodos na ordem VTable

A tabela a seguir mostra os métodos de IDiaFrameData.

Método Descrição
IDiaFrameData::get_addressSection Recupera a parte da seção do endereço de código do quadro.
IDiaFrameData::get_addressOffset Recupera a parte de deslocamento do endereço de código do quadro.
IDiaFrameData::get_relativeVirtualAddress Recupera o RVA (endereço virtual relativo) da imagem do código para o quadro.
IDiaFrameData::get_virtualAddress Recupera o VA (endereço virtual) do código do quadro.
IDiaFrameData::get_lengthBlock Recupera o tamanho, em bytes, do bloco de código descrito pelo quadro.
IDiaFrameData::get_lengthLocals Recupera o número de bytes de variáveis locais enviadas por push na pilha.
IDiaFrameData::get_lengthParams Recupera o número de bytes de parâmetros enviados por push para a pilha.
IDiaFrameData::get_maxStack Recupera o número máximo de bytes enviados por push na pilha no quadro.
IDiaFrameData::get_lengthProlog Recupera o número de bytes de código de prólogo no bloco.
IDiaFrameData::get_lengthSavedRegisters Recupera o número de bytes dos registros salvos que efetuaram push na pilha.
IDiaFrameData::get_program Recupera a cadeia de caracteres do programa usada para calcular o conjunto de registros antes da chamada para a função atual.
IDiaFrameData::get_systemExceptionHandling Recupera um sinalizador que indica se o tratamento de exceções do sistema está em vigor.
IDiaFrameData::get_cplusplusExceptionHandling Recupera um sinalizador que indica se o tratamento de exceções C++ está em vigor.
IDiaFrameData::get_functionStart Recupera um sinalizador que indica que o bloco contém o ponto de entrada de uma função.
IDiaFrameData::get_allocatesBasePointer Recupera um sinalizador que indica que o ponteiro base é alocado para código nesse intervalo de endereços. Esse método é preterido.
IDiaFrameData::get_type Recupera o tipo de quadro específico do compilador.
IDiaFrameData::get_functionParent Recupera a interface de dados de quadro para a função de delimitação.
IDiaFrameData::execute Executa o desenrolamento da pilha e retorna o estado atual dos registros em uma interface de exame da pilha.

Comentários

Os detalhes disponíveis para um quadro são de pontos de execução dentro do intervalo de endereços indicado pelo endereço e pelo tamanho do bloco.

Observações para chamadores

Obtenha essa interface chamando os métodos IDiaEnumFrameData::Next ou IDiaEnumFrameData::Item. Confira a interface IDiaEnumFrameData para obter detalhes.

Exemplo

Este exemplo imprime as propriedades de um objeto IDiaFrameData. Confira a interface IDiaEnumFrameData para obter um exemplo de como a interface IDiaFrameData é obtida.

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

Requisitos

Cabeçalho: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia80.dll

Confira também