Bagikan melalui


IDiaSegment

Memetakan data dari nomor bagian ke segmen ruang alamat.

Sintaks

IDiaSegment : IUnknown

Metode dalam Urutan Vtable

Tabel berikut memperlihatkan metode IDiaSegment.

Metode Deskripsi
IDiaSegment::get_frame Mengambil nomor segmen.
IDiaSegment::get_offset Mengambil offset dalam segmen tempat bagian dimulai.
IDiaSegment::get_length Ambil jumlah byte dalam segmen.
IDiaSegment::get_read Mengambil bendera yang menunjukkan apakah segmen dapat dibaca.
IDiaSegment::get_write Mengambil bendera yang menunjukkan apakah segmen dapat dimodifikasi.
IDiaSegment::get_execute Ambil bendera yang menunjukkan apakah segmen dapat dijalankan.
IDiaSegment::get_addressSection Mengambil nomor bagian yang memetakan ke segmen ini.
IDiaSegment::get_relativeVirtualAddress Mengambil alamat virtual relatif (RVA) awal bagian.
IDiaSegment::get_virtualAddress Mengambil alamat virtual (VA) dari awal bagian.

Keterangan

Karena SDK Akses Antarmuka Debug (DIA) sudah melakukan terjemahan dari offset bagian ke alamat virtual relatif, sebagian besar aplikasi tidak akan menggunakan informasi di peta segmen.

Catatan untuk Penelepon

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

Contoh

Fungsi ini menampilkan alamat semua segmen dalam tabel dan simbol terdekat.

void ShowSegments(IDiaTable *pTable, IDiaSession *pSession)
{
    CComPtr<IDiaEnumSegments> pSegments;
    if ( SUCCEEDED( pTable->QueryInterface(
                                _uuidof( IDiaEnumSegments ),
                               (void**)&pSegments )
                  )
       )
    {
        CComPtr<IDiaSegment> pSegment;
        while ( SUCCEEDED( hr = pSegments->Next( 1, &pSegment, &celt ) ) &&
                celt == 1 )
        {
            DWORD rva;
            DWORD seg;

            pSegment->get_addressSection( &seg );
            if ( pSegment->get_relativeVirtualAddress( &rva ) == S_OK )
            {
                printf( "Segment %i addr: 0x%.8X\n", seg, rva );
                pSegment = 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( "\tClosest symbol: %ws (%ws)\n",
                            name != NULL ? name : L"",
                            szTags[ tag ] );
                }
            }
        }
    }
}

Persyaratan

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

Lihat juga