IDiaFrameData
Espone i dettagli di un frame dello stack.
Sintassi
IDiaFrameData : IUnknown
Metodi nell'ordine Vtable
Nella tabella seguente vengono illustrati i metodi di IDiaFrameData
.
metodo | Descrizione |
---|---|
IDiaFrameData::get_addressSection | Recupera la parte della sezione dell'indirizzo di codice per il frame. |
IDiaFrameData::get_addressOffset | Recupera la parte offset dell'indirizzo di codice per il frame. |
IDiaFrameData::get_relativeVirtualAddress | Recupera l'indirizzo virtuale relativo dell'immagine del codice per il frame. |
IDiaFrameData::get_virtualAddress | Recupera l'indirizzo virtuale (VA) del codice per il frame. |
IDiaFrameData::get_lengthBlock | Recupera la lunghezza, in byte, del blocco di codice descritto dal frame. |
IDiaFrameData::get_lengthLocals | Recupera il numero di byte di variabili locali di cui è stato eseguito il push nello stack. |
IDiaFrameData::get_lengthParams | Recupera il numero di byte di parametri inseriti nello stack. |
IDiaFrameData::get_maxStack | Recupera il numero massimo di byte inseriti nello stack nel frame. |
IDiaFrameData::get_lengthProlog | Recupera il numero di byte di codice prologo nel blocco. |
IDiaFrameData::get_lengthSavedRegisters | Recupera il numero di byte di registri salvati inseriti nello stack. |
IDiaFrameData::get_program | Recupera la stringa di programma utilizzata per calcolare il set di registri prima della chiamata alla funzione corrente. |
IDiaFrameData::get_systemExceptionHandling | Recupera un flag che indica che la gestione delle eccezioni di sistema è attiva. |
IDiaFrameData::get_cplusplusExceptionHandling | Recupera un flag che indica che la gestione delle eccezioni C++ è attiva. |
IDiaFrameData::get_functionStart | Recupera un flag che indica che il blocco contiene il punto di ingresso di una funzione. |
IDiaFrameData::get_allocatesBasePointer | Recupera un flag che indica che il puntatore di base viene allocato per il codice in questo intervallo di indirizzi. Questo metodo è deprecato. |
IDiaFrameData::get_type | Recupera il tipo di frame specifico del compilatore. |
IDiaFrameData::get_functionParent | Recupera l'interfaccia dei dati dei frame per la funzione di inclusione. |
IDiaFrameData::execute | Esegue la rimozione dello stack e restituisce lo stato corrente dei registri in un'interfaccia stack walk frame. |
Osservazioni:
I dettagli disponibili per un frame sono relativi ai punti di esecuzione all'interno dell'intervallo di indirizzi indicato dall'indirizzo e dalla lunghezza del blocco.
Note per i chiamanti
Ottenere questa interfaccia chiamando i metodi IDiaEnumFrameData::Next o IDiaEnumFrameData::Item . Per informazioni dettagliate, vedere l'interfaccia IDiaEnumFrameData .
Esempio
In questo esempio vengono stampate le proprietà di un IDiaFrameData
oggetto . Per un esempio di come viene ottenuta l'interfaccia IDiaEnumFrameData, vedere l'interfaccia IDiaFrameData
IDiaEnumFrameData.
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");
}
}
}
Requisiti
Intestazione: Dia2.h
Libreria: diaguids.lib
DLL: msdia80.dll