Freigeben über


IDiaFrameData

Hiermit werden die Details des Stapelrahmens verfügbar gemacht.

Syntax

IDiaFrameData : IUnknown

Methoden in Vtable-Reihenfolge

In der folgenden Tabelle sind die Methoden von IDiaFrameData aufgeführt.

Methode BESCHREIBUNG
IDiaFrameData::get_addressSection Hiermit wird der Abschnittsteil der Codeadresse für den Frame abgerufen.
IDiaFrameData::get_addressOffset Hiermit wird der Offsetteil der Codeadresse für den Frame abgerufen.
IDiaFrameData::get_relativeVirtualAddress Hiermit wird die zum Image relative virtuelle Adresse (Relative Virtual Address, RVA) des Codes für den Frame abgerufen.
IDiaFrameData::get_virtualAddress Hiermit wir die virtuelle Adresse (VA) des Codes für den Frame abgerufen.
IDiaFrameData::get_lengthBlock Hiermit wird die Länge des Codeblocks in Bytes abgerufen, der vom Frame beschrieben wird.
IDiaFrameData::get_lengthLocals Hiermit wird die Anzahl der Bytes der lokalen Variablen abgerufen, die in den Stapel gepusht werden.
IDiaFrameData::get_lengthParams Hiermit wird die Anzahl der Bytes von Parametern abgerufen, die in den Stapel gepusht werden.
IDiaFrameData::get_maxStack Hiermit wird die maximale Anzahl von Bytes abgerufen, die in den Stapel im Frame gepusht werden.
IDiaFrameData::get_lengthProlog Hiermit wird die Anzahl von Bytes des Prologcodes im Block abgerufen.
IDiaFrameData::get_lengthSavedRegisters Hiermit wird die Anzahl der Bytes der gespeicherten Register abgerufen, die in den Stapel gepusht werden.
IDiaFrameData::get_program Hiermit wird die Programmzeichenfolge abgerufen, die zum Berechnen des Registersatzes vor dem Aufruf der aktuellen Funktion verwendet wird.
IDiaFrameData::get_systemExceptionHandling Hiermit wird ein Flag abgerufen, das angibt, dass die Systemausnahmebehandlung wirksam ist.
IDiaFrameData::get_cplusplusExceptionHandling Hiermit wird ein Flag abgerufen, das angibt, dass die C++-Ausnahmebehandlung wirksam ist.
IDiaFrameData::get_functionStart Hiermit wird ein Flag abgerufen, das angibt, dass der Block den Einstiegspunkt einer Funktion enthält.
IDiaFrameData::get_allocatesBasePointer Hiermit wird ein Flag abgerufen, das angibt, dass der Basiszeiger für Code in diesem Adressbereich zugewiesen ist. Diese Methode ist als veraltet markiert.
IDiaFrameData::get_type Hiermit wird der compilerspezifische Frametyp abgerufen.
IDiaFrameData::get_functionParent Hiermit wird eine Framedatenschnittstelle für die einschließende Funktion abgerufen.
IDiaFrameData::execute Hiermit werden Stapelentladungen durchgeführt, und der aktuelle Status von Registern in einer Stapellauf-Frameschnittstelle wird zurückgegeben.

Bemerkungen

Die für einen Frame verfügbaren Details beziehen sich auf Ausführungspunkte innerhalb des Adressbereichs, der durch die Adress- und Blocklänge angegeben ist.

Hinweise für Aufrufer

Sie können diese Schnittstelle abrufen, indem Sie die Methode IDiaEnumFrameData::Next oder die Methode IDiaEnumFrameData::Item aufrufen. Weitere Informationen finden Sie im Artikel zur IDiaEnumFrameData-Schnittstelle.

Beispiel

In diesem Beispiel werden die Eigenschaften eines IDiaFrameData-Objekts ausgegeben. Im Artikel zur IDiaEnumFrameData-Schnittstelle finden Sie ein Beispiel dazu, wie die IDiaFrameData-Schnittstelle abgerufen wird.

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

Anforderungen

Header: Dia2.h

Bibliothek: diaguids.lib

DLL: msdia80.dll

Weitere Informationen