Aracılığıyla paylaş


IDiaSegment

Bölüm numarasındaki verileri adres alanı segmentleriyle eşler.

Sözdizimi

IDiaSegment : IUnknown

Vtable Sırasına Göre Yöntemler

Aşağıdaki tabloda yönteminin yöntemleri gösterilmektedir IDiaSegment.

Metot Açıklama
IDiaSegment::get_frame Segment numarasını alır.
IDiaSegment::get_offset Bölümün başladığı segmentlerdeki uzaklığı alır.
IDiaSegment::get_length Segmentteki bayt sayısını alır.
IDiaSegment::get_read Kesimin okunup okunamayacağını gösteren bir bayrak alır.
IDiaSegment::get_write Segmentin değiştirilip değiştirilemeyeceğini gösteren bir bayrak alır.
IDiaSegment::get_execute Kesimin yürütülebilir olup olmadığını gösteren bir bayrak alır.
IDiaSegment::get_addressSection Bu segmente eşleyen bölüm numarasını alır.
IDiaSegment::get_relativeVirtualAddress Bölümün başlangıcının göreli sanal adresini (RVA) alır.
IDiaSegment::get_virtualAddress Bölümün başlangıcının sanal adresini (VA) alır.

Açıklamalar

Hata Ayıklama Arabirimi Erişimi (DIA) SDK'sı bölüm uzaklığından göreli sanal adreslere çeviriler gerçekleştirdiğinden, çoğu uygulama segment eşlemesindeki bilgileri kullanmaz.

Arayanlar İçin Notlar

IDiaEnumSegments::Item veya IDiaEnumSegments::Next yöntemlerini çağırarak bu arabirimi alın. Ayrıntılar için örne bakın.

Örnek

Bu işlev, bir tablodaki tüm kesimlerin adresini ve en yakın simgeyi görüntüler.

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

Gereksinimler

Üst bilgi: Dia2.h

Kitaplık: diaguids.lib

DLL: msdia80.dll

Ayrıca bkz.