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