IDiaSegment
Mapuje dane z numeru sekcji na segmenty przestrzeni adresowej.
Składnia
IDiaSegment : IUnknown
Metody w tabeli Vtable Order
W poniższej tabeli przedstawiono metody .IDiaSegment
Metoda | opis |
---|---|
IDiaSegment::get_frame | Pobiera numer segmentu. |
IDiaSegment::get_offset | Pobiera przesunięcie w segmentach, w których rozpoczyna się sekcja. |
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 zmodyfikować. |
IDiaSegment::get_execute | Pobiera flagę wskazującą, czy segment jest wykonywalny. |
IDiaSegment::get_addressSection | Pobiera numer sekcji, który jest mapowana na ten segment. |
IDiaSegment::get_relativeVirtualAddress | Pobiera względny adres wirtualny (RVA) na początku sekcji. |
IDiaSegment::get_virtualAddress | Pobiera adres wirtualny (VA) na początku sekcji. |
Uwagi
Ponieważ zestaw SDK dostępu do interfejsu debugowania (DIA) wykonuje już tłumaczenia z sekcji przesunięcia do względnych adresów wirtualnych, większość aplikacji nie będzie korzystać z informacji na mapie segmentów.
Uwagi dotyczące wywoływania
Uzyskaj ten interfejs, wywołując metody IDiaEnumSegments::Item lub IDiaEnumSegments::Next . Zobacz przykład, aby uzyskać szczegółowe informacje.
Przykład
Ta funkcja wyświetla adres wszystkich segmentów w tabeli i najbliższy 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
Biblioteka: diaguids.lib
BIBLIOTEKA DLL: msdia80.dll