IDiaFrameData
Uwidacznia szczegóły ramki stosu.
Składnia
IDiaFrameData : IUnknown
Metody w tabeli Vtable Order
W poniższej tabeli przedstawiono metody .IDiaFrameData
Metoda | opis |
---|---|
IDiaFrameData::get_addressSection | Pobiera część sekcji adresu kodu dla ramki. |
IDiaFrameData::get_addressOffset | Pobiera część przesunięcia adresu kodu dla ramki. |
IDiaFrameData::get_relativeVirtualAddress | Pobiera względny adres wirtualny obrazu (RVA) kodu dla ramki. |
IDiaFrameData::get_virtualAddress | Pobiera wirtualny adres (VA) kodu dla ramki. |
IDiaFrameData::get_lengthBlock | Pobiera długość bloku kodu opisanego przez ramkę w bajtach. |
IDiaFrameData::get_lengthLocals | Pobiera liczbę bajtów zmiennych lokalnych wypychanych na stos. |
IDiaFrameData::get_lengthParams | Pobiera liczbę bajtów parametrów wypychanych na stosie. |
IDiaFrameData::get_maxStack | Pobiera maksymalną liczbę bajtów wypychanych na stos w ramce. |
IDiaFrameData::get_lengthProlog | Pobiera liczbę bajtów kodu prologu w bloku. |
IDiaFrameData::get_lengthSavedRegisters | Pobiera liczbę bajtów zapisanych rejestrów wypychanych na stos. |
IDiaFrameData::get_program | Pobiera ciąg programu używany do obliczania zestawu rejestrów przed wywołaniem bieżącej funkcji. |
IDiaFrameData::get_systemExceptionHandling | Pobiera flagę wskazującą, że obsługa wyjątków systemowych jest w mocy. |
IDiaFrameData::get_cplusplusExceptionHandling | Pobiera flagę wskazującą, że obsługa wyjątków języka C++ jest w mocy. |
IDiaFrameData::get_functionStart | Pobiera flagę wskazującą, że blok zawiera punkt wejścia funkcji. |
IDiaFrameData::get_allocatesBasePointer | Pobiera flagę wskazującą, że wskaźnik podstawowy jest przydzielany do kodu w tym zakresie adresów. Ta metoda jest przestarzała. |
IDiaFrameData::get_type | Pobiera typ ramki specyficznego dla kompilatora. |
IDiaFrameData::get_functionParent | Pobiera interfejs danych ramek dla funkcji otaczającej. |
IDiaFrameData::execute | Wykonuje odwijanie stosu i zwraca bieżący stan rejestrów w interfejsie ramki stosu. |
Uwagi
Szczegóły dostępne dla ramki dotyczą punktów wykonywania w zakresie adresów wskazywanych przez adres i długość bloku.
Uwagi dotyczące wywoływania
Uzyskaj ten interfejs, wywołując metody IDiaEnumFrameData::Next lub IDiaEnumFrameData::Item . Aby uzyskać szczegółowe informacje, zobacz interfejs IDiaEnumFrameData.
Przykład
W tym przykładzie są wyświetlane właściwości IDiaFrameData
obiektu. Zobacz interfejs IDiaEnumFrameData, aby zapoznać się z przykładem sposobu uzyskiwania interfejsuIDiaFrameData
.
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");
}
}
}
Wymagania
Nagłówek: Dia2.h
Biblioteka: diaguids.lib
BIBLIOTEKA DLL: msdia80.dll