IDiaStackFrame
Expone las propiedades de un marco de pila.
Syntax
IDiaStackFrame : IUnknown
Métodos en orden de Vtable
Los métodos siguientes son compatibles con esta interfaz:
Método | Descripción |
---|---|
IDiaStackFrame::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. |
IDiaStackFrame::get_base | Recupera la base de direcciones del marco. |
IDiaStackFrame::get_cplusplusExceptionHandling | Recupera una marca que indica que el control de excepciones de C++ está en vigor. |
IDiaStackFrame::get_functionStart | Recupera una marca que indica que el bloque contiene el punto de entrada de una función. |
IDiaStackFrame::get_lengthLocals | Recupera el número de bytes de variables locales insertadas en la pila. |
IDiaStackFrame::get_lengthParams | Recupera el número de bytes de los parámetros insertados en la pila. |
IDiaStackFrame::get_lengthProlog | Recupera el número de bytes de código del prólogo en el bloque. |
IDiaStackFrame::get_lengthSavedRegisters | Recupera el número de bytes de los registros guardados insertados en la pila. |
IDiaStackFrame::get_localsBase | Recupera la base de direcciones de las variables locales. |
IDiaStackFrame::get_maxStack | Recupera el número máximo de bytes insertados en la pila en el marco. |
IDiaStackFrame::get_rawLVarInstanceValue | Recupera el valor de la variable local especificada como bytes sin procesar. |
IDiaStackFrame::get_registerValue | Recupera el valor de un registro especificado. |
IDiaStackFrame::get_returnAddress | Recupera la dirección de retorno del marco. |
IDiaStackFrame::get_size | Especifica el tamaño del marco en bytes. |
IDiaStackFrame::get_systemExceptionHandling | Recupera una marca que indica que el control de excepciones del sistema está en vigor. |
IDiaStackFrame::get_type | Recupera el tipo de marco. |
Comentarios
Un marco de pila es una abstracción de una llamada de función durante su ejecución.
Notas para autores de la llamada
Obtenga esta interfaz llamando al método IDiaEnumStackFrames::Next. Consulte la interfaz IDiaEnumStackFrames para obtener un ejemplo sobre cómo obtener la interfaz IDiaStackFrame
.
Ejemplo
En este ejemplo se muestran varios atributos de un marco de pila.
void PrintStackFrame(IDiaStackFrame* pFrame)
{
if (pFrame != NULL)
{
ULONGLONG bottom = 0;
ULONGLONG top = 0;
if (pFrame->get_base(&bottom) == S_OK &&
pFrame->get_registerValue( CV_REG_ESP, &top ) == S_OK )
{
printf("range = 0x%08I64x - 0x%08I64x\n", bottom, top);
}
ULONGLONG returnAddress = 0;
if (pFrame->get_returnAddress(&returnAddress) == S_OK)
{
printf("return address = 0x%08I64x\n", returnAddress);
}
DWORD lengthFrame = 0;
DWORD lengthLocals = 0;
DWORD lengthParams = 0;
DWORD lengthProlog = 0;
DWORD lengthSavedRegs = 0;
if (pFrame->get_size(&lengthFrame) == S_OK &&
pFrame->get_lengthLocals(&lengthLocals) == S_OK &&
pFrame->get_lengthParams(&lengthParams) == S_OK &&
pFrame->get_lengthProlog(&lengthProlog) == S_OK &&
pFrame->get_lengthSavedRegisters(&lengthSavedRegs) == S_OK)
{
printf("stack frame size = 0x%08lx bytes\n", lengthFrame);
printf("length of locals = 0x%08lx bytes\n", lengthLocals);
printf("length of parameters = 0x%08lx bytes\n", lengthParams);
printf("length of prolog = 0x%08lx bytes\n", lengthProlog);
printf("length of saved registers = 0x%08lx bytes\n", lengthSavedRegs);
}
}
}
Requisitos
Encabezado: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll