IDiaSegment

Dati di mapping del numero di sezione ai segmenti di spazio degli indirizzi.

IDiaSegment : IUnknown

Metodi nell'ordine di Vtable

Nella tabella seguente sono elencati i metodi di IDiaSegment.

Metodo

Descrizione

IDiaSegment::get_frame

recupera il numero di segmento.

IDiaSegment::get_offset

Recupera offset in segmenti in cui la sezione verrà avviato.

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 mappata a questo segmento.

IDiaSegment::get_relativeVirtualAddress

Recupera indirizzo (RVA) virtuale relativo dell'avvio della sezione.

IDiaSegment::get_virtualAddress

Recupera indirizzo (VA) virtuale dell'avvio della sezione.

Note

Poiché il DIA SDK già esegue le conversioni dalla sezione di stampa l'offset degli indirizzi virtuali relativi (RVA, la maggior parte delle applicazioni non useranno le informazioni nel mapping del segmento.

Note per i chiamanti

Leggi questa interfaccia chiamando IDiaEnumSegments::Item o IDiaEnumSegments::Next metodi.Vedere l'esempio relativo ai dettagli.

Esempio

Questa funzione visualizzare l'indirizzo di tutti i segmenti in una tabella e nel 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

raccolta: diaguids.lib

DLL: msdia80.dll

Vedere anche

Riferimenti

IDiaEnumSegments::Item

IDiaEnumSegments::Next

Altre risorse

Interfacce (Debug Interface Access SDK)