Udostępnij za pośrednictwem


IDiaSegment

Dane mapy z numer sekcji do segmentów w przestrzeni adresowej.

IDiaSegment : IUnknown

Metody w kolejności Vtable

W poniższej tabeli przedstawiono metody IDiaSegment.

Metoda

Opis

IDiaSegment::get_frame

Pobiera numer segmentu.

IDiaSegment::get_offset

Pobiera przesunięcie w segmentach, gdzie rozpoczyna się w sekcji.

IDiaSegment::get_length

Pobiera liczbę bajtów w segmencie.

IDiaSegment::get_read

Pobiera flagę wskazującą, czy segment można odczytać.

IDiaSegment::get_write

Pobiera flagę wskazującą, czy segment można modyfikować.

IDiaSegment::get_execute

Pobiera flagę wskazującą, czy segment jest wykonywalny.

IDiaSegment::get_addressSection

Pobiera numer sekcji, która mapuje do tego segmentu.

IDiaSegment::get_relativeVirtualAddress

Pobiera względny adres wirtualny (RVA) Początek sekcji.

IDiaSegment::get_virtualAddress

Pobiera adres wirtualny (VA) Początek sekcji.

Uwagi

Ponieważ DIA SDK już wykonuje tłumaczenia z przesunięciem sekcji względnych adresów wirtualnych, większość aplikacji nie spowoduje, że wykorzystanie informacji w mapie segmentu.

Uwagi do wywoływania

Ten interfejs uzyskać, wywołując IDiaEnumSegments::Item lub IDiaEnumSegments::Next metody.Zobacz przykład, aby uzyskać szczegółowe informacje.

Przykład

Funkcja ta wyświetla adres wszystkich segmentów w tabeli i dokładnością symbol.

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

Wymagania

Nagłówek: Dia2.h

Biblioteki: diaguids.lib

Biblioteka DLL: msdia80.dll

Zobacz też

Informacje

IDiaEnumSegments::Item

IDiaEnumSegments::Next

Inne zasoby

Interfejsy (dostęp do interfejsu SDK debugowanie)