Freigeben über


IDiaSegment

Ordnet Segmenten des Adressraums Daten aus der Abschnittsnummer zu.

Syntax

IDiaSegment : IUnknown

Methoden in Vtable-Reihenfolge

In der folgenden Tabelle sind die Methoden von IDiaSegment aufgeführt.

Methode BESCHREIBUNG
IDiaSegment::get_frame Ruft die Segmentnummer ab.
IDiaSegment::get_offset Ruft den Offset in Segmenten ab, an dem der Abschnitt beginnt.
IDiaSegment::get_length Ruft die Anzahl der Bytes im Segment ab.
IDiaSegment::get_read Ruft ein Flag ab, das anzeigt, ob das Segment gelesen werden kann.
IDiaSegment::get_write Ruft ein Flag ab, das anzeigt, ob das Segment geändert werden kann.
IDiaSegment::get_execute Ruft ein Flag ab, das anzeigt, ob das Segment ausführbar ist.
IDiaSegment::get_addressSection Ruft die Abschnittsnummer ab, die diesem Segment zugeordnet ist.
IDiaSegment::get_relativeVirtualAddress Ruft die relative virtuelle Adresse (RVA) am Anfang des Abschnitts ab.
IDiaSegment::get_virtualAddress Ruft die virtuelle Adresse (VA) am Anfang des Abschnitts ab.

Hinweise

Da das DEBUG Interface Access (DIA) SDK bereits Übersetzungen aus dem Abschnittsversatz in relative virtuelle Adressen durchführt, verwenden die meisten Anwendungen die Informationen in der Segmentzuordnung nicht.

Hinweise für Aufrufer

Rufen Sie diese Schnittstelle ab, indem Sie die Methode IDiaEnumSegments::Item oder IDiaEnumSegments::Next aufrufen. Detail finden Sie in dem Beispiel.

Beispiel

Diese Funktion zeigt die Adresse aller Segmente in einer Tabelle sowie das nächstgelegene Symbol an.

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

Requirements (Anforderungen)

Header: Dia2.h

Bibliothek: diaguids.lib

DLL: msdia80.dll

Weitere Informationen