Bagikan melalui


IDiaFrameData

Mengekspos detail bingkai tumpukan.

Sintaks

IDiaFrameData : IUnknown

Metode dalam Urutan Vtable

Tabel berikut memperlihatkan metode IDiaFrameData.

Metode Deskripsi
IDiaFrameData::get_addressSection Mengambil bagian dari alamat kode untuk bingkai.
IDiaFrameData::get_addressOffset Ambil bagian offset dari alamat kode untuk bingkai.
IDiaFrameData::get_relativeVirtualAddress Mengambil alamat virtual relatif gambar (RVA) kode untuk bingkai.
IDiaFrameData::get_virtualAddress Mengambil alamat virtual (VA) dari kode untuk bingkai.
IDiaFrameData::get_lengthBlock Mengambil panjang, dalam byte, dari blok kode yang dijelaskan oleh bingkai.
IDiaFrameData::get_lengthLocals Mengambil jumlah byte variabel lokal yang didorong pada tumpukan.
IDiaFrameData::get_lengthParams Mengambil jumlah byte parameter yang didorong pada tumpukan.
IDiaFrameData::get_maxStack Mengambil jumlah maksimum byte yang didorong pada tumpukan dalam bingkai.
IDiaFrameData::get_lengthProlog Mengambil jumlah byte kode prolog dalam blok.
IDiaFrameData::get_lengthSavedRegisters Mengambil jumlah byte register tersimpan yang didorong pada tumpukan.
IDiaFrameData::get_program Mengambil string program yang digunakan untuk menghitung set register sebelum panggilan ke fungsi saat ini.
IDiaFrameData::get_systemExceptionHandling Mengambil bendera yang menunjukkan bahwa penanganan pengecualian sistem berlaku.
IDiaFrameData::get_cplusplusExceptionHandling Mengambil bendera yang menunjukkan bahwa penanganan pengecualian C++ berlaku.
IDiaFrameData::get_functionStart Mengambil bendera yang menunjukkan bahwa blok berisi titik masuk fungsi.
IDiaFrameData::get_allocatesBasePointer Mengambil bendera yang menunjukkan bahwa penunjuk dasar dialokasikan untuk kode dalam rentang alamat ini. Metode ini tidak digunakan lagi.
IDiaFrameData::get_type Mengambil jenis bingkai khusus pengompilasi.
IDiaFrameData::get_functionParent Mengambil antarmuka data bingkai untuk fungsi penutup.
IDiaFrameData:execute Melakukan unwinding tumpukan dan mengembalikan status register saat ini dalam antarmuka bingkai stack walk.

Keterangan

Detail yang tersedia untuk bingkai adalah untuk titik eksekusi dalam rentang alamat yang ditunjukkan oleh alamat dan panjang blok.

Catatan untuk Penelepon

Dapatkan antarmuka ini dengan memanggil metode IDiaEnumFrameData::Next atau IDiaEnumFrameData::Item . Lihat antarmuka IDiaEnumFrameData untuk detailnya.

Contoh

Contoh ini mencetak properti IDiaFrameData objek. Lihat antarmuka IDiaEnumFrameData untuk contoh bagaimana IDiaFrameData antarmuka diperoleh.

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

Persyaratan

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

Baca juga