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