Export (0) Print
Expand All

IDiaStackFrame

Exposes the properties of a stack frame.

IDiaStackFrame : IUnknown

The following are methods supported by this interface:

Method

Description

IDiaStackFrame::get_allocatesBasePointer

Retrieves a flag indicating that the base pointer is allocated for code in this address range. This method is deprecated.

IDiaStackFrame::get_base

Retrieves the address base of the frame.

IDiaStackFrame::get_cplusplusExceptionHandling

Retrieves a flag indicating that C++ exception handling is in effect.

IDiaStackFrame::get_functionStart

Retrieves a flag indicating that the block contains the entry point of a function.

IDiaStackFrame::get_lengthLocals

Retrieves the number of bytes of local variables pushed on the stack.

IDiaStackFrame::get_lengthParams

Retrieves the number of bytes of parameters pushed on the stack.

IDiaStackFrame::get_lengthProlog

Retrieves the number of bytes of prologue code in the block

IDiaStackFrame::get_lengthSavedRegisters

Retrieves the number of bytes of saved registers pushed on the stack.

IDiaStackFrame::get_localsBase

Retrieves the address base of the locals.

IDiaStackFrame::get_lVarInstanceLocation

Retrieves the location of the specified local variable.

IDiaStackFrame::get_maxStack

Retrieves the maximum number of bytes pushed on the stack in the frame.

IDiaStackFrame::get_rawLVarInstanceValue

Retrieves the value of the specified local variable as raw bytes.

IDiaStackFrame::get_registerValue

Retrieves the value of a specified register.

IDiaStackFrame::get_returnAddress

Retrieves the return address of the frame.

IDiaStackFrame::get_size

Retrieves the size of the frame in bytes.

IDiaStackFrame::get_systemExceptionHandling

Retrieves a flag indicating that system exception handling is in effect.

IDiaStackFrame::get_type

Retrieves the frame type.

A stack frame is an abstraction of a function call during its execution.

Notes for Callers

Obtain this interface by calling the IDiaEnumStackFrames::Next method. See the IDiaEnumStackFrames interface for an example on obtaining the IDiaStackFrame interface.

This example displays various attributes of a stack frame.

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

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

Community Additions

ADD
Show:
© 2014 Microsoft