Partager via


IDiaFrameData

Expose les détails d’un frame de pile.

Syntax

IDiaFrameData : IUnknown

Méthodes dans l'ordre Vtable

Le tableau suivant présente les méthodes de IDiaFrameData.

Méthode Description
IDiaFrameData::get_addressSection Récupère la partie section de l’adresse de code du frame.
IDiaFrameData::get_addressOffset Récupère la partie décalage de l’adresse de code du frame.
IDiaFrameData::get_relativeVirtualAddress Récupère l’adresse virtuelle relative (RVA) de l’image du code du frame.
IDiaFrameData::get_virtualAddress Récupère l’adresse virtuelle (VA) du code du frame.
IDiaFrameData::get_lengthBlock Récupère la longueur, en octets, du bloc de code décrit par le frame.
IDiaFrameData::get_lengthLocals Récupère le nombre d’octets de variables locales envoyées sur la pile.
IDiaFrameData::get_lengthParams Récupère le nombre d’octets de paramètres envoyés sur la pile.
IDiaFrameData::get_maxStack Récupère le nombre maximal d’octets envoyés sur la pile dans le frame.
IDiaFrameData::get_lengthProlog Récupère le nombre d’octets de code de prologue dans le bloc.
IDiaFrameData::get_lengthSavedRegisters Récupère le nombre d’octets de registres envoyés sur la pile.
IDiaFrameData::get_program Récupère la chaîne de programme utilisée pour calculer le jeu de registres avant l’appel à la fonction active.
IDiaFrameData::get_systemExceptionHandling Récupère un indicateur qui spécifie que la gestion des exceptions système est en vigueur.
IDiaFrameData::get_cplusplusExceptionHandling Récupère un indicateur qui spécifie que la gestion des exceptions C++ est en vigueur.
IDiaFrameData::get_functionStart Récupère un indicateur qui spécifie que le bloc contient le point d’entrée d’une fonction.
IDiaFrameData::get_allocatesBasePointer Récupère un indicateur qui spécifie si le pointeur de base est alloué pour le code dans cette plage d’adresses. Cette méthode est déconseillée.
IDiaFrameData::get_type Récupère le type de frame spécifique au compilateur.
IDiaFrameData::get_functionParent Récupère l’interface de données du frame pour la fonction englobante.
IDiaFrameData::execute Effectue le déroulement de la pile et retourne l’état actuel des registres dans une interface de frame de parcours de pile.

Remarques

Les détails disponibles pour un frame concernent les points d’exécution dans la plage d’adresses indiquée par l’adresse et la longueur du bloc.

Remarques pour les appelants

Pour obtenir cette interface, appelez les méthodes IDiaEnumFrameData::Next ou IDiaEnumFrameData::Item. Pour plus d’informations, consultez l’interface IDiaEnumFrameData.

Exemple

Cet exemple montre comment imprimer les propriétés d’un objet IDiaFrameData. Consultez l’interface IDiaEnumFrameData pour un exemple d’obtention de l’interface 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");
        }
    }
}

Configuration requise

En-tête : Dia2.h

Bibliothèque : diaguids.lib

DLL : msdia80.dll

Voir aussi