Bagikan melalui


IDiaSectionContrib

Mengambil data yang menjelaskan kontribusi bagian, yaitu, blok memori yang berdekatan yang disumbangkan ke gambar oleh kompilasi.

Sintaks

IDiaSectionContrib : IUnknown

Metode dalam Urutan Vtable

Tabel berikut memperlihatkan metode IDiaSectionContrib.

Metode Deskripsi
IDiaSectionContrib::get_compiland Mengambil referensi ke simbol kompilasi yang berkontribusi pada bagian ini.
IDiaSectionContrib::get_addressSection Mengambil bagian dari alamat kontribusi.
IDiaSectionContrib::get_addressOffset Mengambil bagian offset dari alamat kontribusi.
IDiaSectionContrib::get_relativeVirtualAddress Mengambil alamat virtual relatif (RVA) gambar dari kontribusi.
IDiaSectionContrib::get_virtualAddress Mengambil alamat virtual (VA) dari kontribusi.
IDiaSectionContrib::get_length Mengambil jumlah byte dalam satu bagian.
IDiaSectionContrib::get_notPaged Mengambil tanda yang menunjukkan apakah bagian tidak dapat dikeluarkan dari memori.
IDiaSectionContrib::get_nopad Mengambil bendera yang menunjukkan apakah bagian tidak boleh diisi ke batas memori berikutnya.
IDiaSectionContrib::get_code Mengambil tanda yang menunjukkan apakah bagian tersebut berisi kode yang dapat dieksekusi.
IDiaSectionContrib::get_initializedData Mengambil tanda yang menunjukkan apakah bagian tersebut berisi data yang diinisialisasi.
IDiaSectionContrib::get_uninitializedData Mengambil tanda yang menunjukkan apakah bagian tersebut berisi data yang batal inisialisasi.
IDiaSectionContrib::get_informational Mengambil bendera yang menunjukkan apakah bagian berisi komentar atau informasi serupa.
IDiaSectionContrib::get_remove Mengambil bendera yang menunjukkan apakah bagian dihapus sebelum dibuat sebagai bagian dari gambar dalam memori.
IDiaSectionContrib::get_comdat Mengambil tanda yang menunjukkan apakah bagian tersebut adalah rekaman COMDAT.
IDiaSectionContrib::get_discardable Mengambil bendera yang menunjukkan apakah bagian tersebut dapat dibuang.
IDiaSectionContrib::get_notCached Mengambil bendera yang menunjukkan apakah bagian tidak dapat di-cache.
IDiaSectionContrib::get_share Mengambil bendera yang menunjukkan apakah bagian dapat dibagikan dalam memori.
IDiaSectionContrib::get_execute Mengambil bendera yang mengindikasikan apakah bagian dapat dijalankan sebagai kode.
IDiaSectionContrib::get_read Ambil bendera yang menunjukkan apakah bagian tersebut dapat dibaca.
IDiaSectionContrib::get_write Mengambil bendera yang menunjukkan apakah bagian dapat ditulis.
IDiaSectionContrib::get_dataCrc Mengambil pemeriksaan kelebihan putaran (CRC) data di bagian tersebut.
IDiaSectionContrib::get_relocationsCrc Mengambil CRC dari informasi relokasi untuk bagian tersebut.
IDiaSectionContrib::get_compilandId Mengambil pengidentifikasi kompilasi untuk bagian tersebut.
IDiaSectionContrib::get_code16bit Mengambil bendera yang menunjukkan apakah bagian tersebut berisi kode 16-bit.

Keterangan

Catatan untuk Penelepon

Antarmuka ini diperoleh dengan memanggil IDiaEnumSectionContribs::Item metode dan IDiaEnumSectionContribs::Next . IDiaEnumSectionContribs Lihat antarmuka untuk contoh mendapatkan IDiaSectionContrib antarmuka.

Contoh

Fungsi ini menunjukkan alamat setiap bagian bersama dengan simbol terkait. IDiaEnumSectionContribs Lihat antarmuka untuk melihat bagaimana IDiaSectionContrib antarmuka diperoleh.

void PrintSectionContrib(IDiaSectionContrib* pSecContrib, IDiaSession* pSession)
{
    if (pSecContrib != NULL && pSession != NULL)
    {
        DWORD rva;
        if ( pSecContrib->get_relativeVirtualAddress( &rva ) == S_OK )
        {
            printf( "\taddr: 0x%.8X", rva );
            pSecContrib = NULL;
            CComPtr<IDiaSymbol> pSym;
            if ( psession->findSymbolByRVA( rva, SymTagNull, &pSym ) == S_OK )
            {
                CDiaBSTR name;
                DWORD    tag;
                pSym->get_symTag( &tag );
                pSym->get_name( &name );
                printf( "     symbol: %ws (%ws)\n",
                        name != NULL ? name : L"",
                        szTags[ tag ] );
            }
            else
            {
                printf( "<no symbol found?>\n" );
            }
        }
        else
        {
            DWORD isect;
            DWORD offset;
            pSecContrib->get_addressSection( &isect );
            pSecContrib->get_addressOffset( &offset );
            printf( "\taddr: 0x%.4X:0x%.8X", isect, offset );
            pSecContrib = NULL;
            CComPtr<IDiaSymbol> pSym;
            if ( SUCCEEDED( psession->findSymbolByAddr(
                                              isect,
                                              offset,
                                              SymTagNull,
                                              &pSym )
                          )
               )
            {
                CDiaBSTR name;
                DWORD    tag;
                pSym->get_symTag( &tag );
                pSym->get_name( &name );
                printf( "     symbol: %ws (%ws)\n",
                    name != NULL ? name : L"",
                    szTags[ tag ] );
            }
            else
            {
                printf( "<no symbol found?>\n" );
            }
        }
    }
}

Persyaratan

Header: Dia2.h

Library: diaguids.lib

DLL: msdia140.dll

Lihat juga