Freigeben über


IDiaSegment

Wird von Daten aus der Nummer des Abschnitts in Segmenten des Adressbereichs.

IDiaSegment : IUnknown

Methoden in die Vtable-Reihenfolge

In der folgenden Tabelle werden die Methoden von IDiaSegmentan.

Methode

Beschreibung

IDiaSegment::get_frame

Ruft die Segmentnummer ab.

IDiaSegment::get_offset

Ruft den Offset in Segmenten ab, in dem der Bereich beginnt.

IDiaSegment::get_length

Ruft die Anzahl von Bytes im Segment ab.

IDiaSegment::get_read

Ruft ein Flag ab, das angibt, ob das Segment gelesen werden kann.

IDiaSegment::get_write

Ruft ein Flag ab, das angibt, ob das Segment geändert werden kann.

IDiaSegment::get_execute

Ruft ein Flag ab, das angibt, ob das Segment ausführbar ist.

IDiaSegment::get_addressSection

Ruft die Nummer des Abschnitts ab, die diesem Segment zuordnet.

IDiaSegment::get_relativeVirtualAddress

Ruft die relative virtuelle Adresse (RVA) vom Anfang des Abschnitts ab.

IDiaSegment::get_virtualAddress

Ruft die virtuelle Adresse (VA) vom Anfang des Abschnitts ab.

Hinweise

Da das DIA SDK bereits ausgeführt wird, Übersetzungen im Abschnitt zu den relativen virtuellen Adressen, die meisten Anwendungen verwenden nicht die Informationen in der Segment aus zugeordnet.

Hinweise für Aufrufer

Rufen Sie diese Schnittstelle, indem sie die IDiaEnumSegments::Item oder IDiaEnumSegments::Next-Methoden aufgerufen werden.Weitere Informationen finden Sie im Beispiel für Details.

Beispiel

Diese Funktion wird die Adresse aller Segmente in einer Tabelle und im nächsten 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 ] );
                }
            }
        }
    }
}

Anforderungen

Header: Dia2.h

Bibliothek: diaguids.lib

DLLs: msdia80.dll

Siehe auch

Referenz

IDiaEnumSegments::Item

IDiaEnumSegments::Next

Weitere Ressourcen

Schnittstellen (Debug Interface Access SDK)