IDiaFrameData
Expone los detalles de un marco de pila.
Sintaxis
IDiaFrameData : IUnknown
Métodos en orden de Vtable
En la tabla siguiente se muestran los métodos de IDiaFrameData
.
Método | Descripción |
---|---|
IDiaFrameData::get_addressSection | Recupera la parte de sección de la dirección de código del marco. |
IDiaFrameData::get_addressOffset | Recupera la parte de desplazamiento de la dirección de código del marco. |
IDiaFrameData::get_relativeVirtualAddress | Recupera la dirección virtual relativa (RVA) de imagen del código del marco. |
IDiaFrameData::get_virtualAddress | Recupera la dirección virtual (VA) del código del marco. |
IDiaFrameData::get_lengthBlock | Recupera la longitud, en bytes, del bloque de código descrito por el marco. |
IDiaFrameData::get_lengthLocals | Recupera el número de bytes de variables locales insertadas en la pila. |
IDiaFrameData::get_lengthParams | Recupera el número de bytes de los parámetros insertados en la pila. |
IDiaFrameData::get_maxStack | Recupera el número máximo de bytes insertados en la pila en el marco. |
IDiaFrameData::get_lengthProlog | Recupera el número de bytes de código del prólogo en el bloque. |
IDiaFrameData::get_lengthSavedRegisters | Recupera el número de bytes de los registros guardados insertados en la pila. |
IDiaFrameData::get_program | Recupera la cadena de programa que se usa para calcular el conjunto de registros antes de la llamada a la función actual. |
IDiaFrameData::get_systemExceptionHandling | Recupera una marca que indica que el control de excepciones del sistema está en vigor. |
IDiaFrameData::get_cplusplusExceptionHandling | Recupera una marca que indica que el control de excepciones de C++ está en vigor. |
IDiaFrameData::get_functionStart | Recupera una marca que indica que el bloque incluye el punto de entrada de una función. |
IDiaFrameData::get_allocatesBasePointer | Recupera una marca que indica que el puntero base se asigna para el código de este intervalo de direcciones. Este método es desusado. |
IDiaFrameData::get_type | Recupera el tipo de marco específico del compilador. |
IDiaFrameData::get_functionParent | Recupera la interfaz de datos de marco para la función envolvente. |
IDiaFrameData::execute | Realiza el desenredado de pila y devuelve el estado actual de los registros en una interfaz de marco de recorrido de pila. |
Comentarios
Los detalles disponibles para un marco son para los puntos de ejecución dentro del intervalo de direcciones indicado por la dirección y la longitud del bloque.
Notas para autores de la llamada
Obtenga esta interfaz llamando a los métodos IDiaEnumFrameData::Next o IDiaEnumFrameData::Item. Consulte la interfaz IDiaEnumFrameData para obtener más información.
Ejemplo
En este ejemplo se imprimen las propiedades de un objeto IDiaFrameData
. Vea la interfaz IDiaEnumFrameData para obtener un ejemplo de cómo se obtiene la interfaz IDiaFrameData
.
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
Encabezado: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll