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