IDiaSegment
Esegue il mapping dei dati dal numero di sezione ai segmenti dello spazio degli indirizzi.
Sintassi
IDiaSegment : IUnknown
Metodi nell'ordine Vtable
Nella tabella seguente vengono illustrati i metodi di IDiaSegment
.
metodo | Descrizione |
---|---|
IDiaSegment::get_frame | Recupera il numero di segmento. |
IDiaSegment::get_offset | Recupera l'offset nei segmenti in cui inizia la sezione. |
IDiaSegment::get_length | Recupera il numero di byte nel segmento. |
IDiaSegment::get_read | Recupera un flag che indica se il segmento può essere letto. |
IDiaSegment::get_write | Recupera un flag che indica se il segmento può essere modificato. |
IDiaSegment::get_execute | Recupera un flag che indica se il segmento è eseguibile. |
IDiaSegment::get_addressSection | Recupera il numero di sezione mappato a questo segmento. |
IDiaSegment::get_relativeVirtualAddress | Recupera l'indirizzo virtuale relativo (RVA) dell'inizio della sezione. |
IDiaSegment::get_virtualAddress | Recupera l'indirizzo virtuale (VA) dell'inizio della sezione. |
Osservazioni:
Poiché Debug Interface Access (DIA) SDK esegue già traduzioni dall'offset di sezione agli indirizzi virtuali relativi, la maggior parte delle applicazioni non userà le informazioni nella mappa dei segmenti.
Note per i chiamanti
Ottenere questa interfaccia chiamando i metodi IDiaEnumSegments::Item o IDiaEnumSegments::Next . Per informazioni dettagliate, vedere l'esempio.
Esempio
Questa funzione visualizza l'indirizzo di tutti i segmenti in una tabella e il simbolo più vicino.
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 ] );
}
}
}
}
}
Requisiti
Intestazione: Dia2.h
Libreria: diaguids.lib
DLL: msdia80.dll