Поделиться через


IDiaSegment

Данные сопоставления из номера секции к сегментам адресного пространства.

IDiaSegment : IUnknown

Методы в том порядке Vtable

В следующей таблице показаны методы IDiaSegment.

Метод

Описание

IDiaSegment::get_frame

Извлекает число сегментов.

IDiaSegment::get_offset

Получает смещение в сегментах где раздел.

IDiaSegment::get_length

Извлекает число байтов в сегменте.

IDiaSegment::get_read

Извлекает пометить, указывающее, является ли сегмент можно считать.

IDiaSegment::get_write

Извлекает пометить, указывающее, является ли сегмент может быть изменен.

IDiaSegment::get_execute

Извлекает пометить, указывающее, является ли сегмент исполнительн.

IDiaSegment::get_addressSection

Получает номер секции, который сопоставляет на этот сегмент.

IDiaSegment::get_relativeVirtualAddress

Получает относительный виртуальный адрес RVA) (начальной секции.

IDiaSegment::get_virtualAddress

Получает виртуальный адрес () VA начальной секции.

Заметки

Поскольку пакет SDK для доступа к интерфейсу отладки еще выполняет преобразование из раздела с относительным виртуальным адресам смещения, большинство приложений не используют сведения в сопоставлении сегмента.

Замечания для вызывающих объектов

Для получения этого интерфейса нужно вызвать метод IDiaEnumSegments::Item OR IDiaEnumSegments::Next методы. См. пример.

Пример

Эта функция отображает адрес всех сегментов в таблице и закрыть символе.

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

Требования

Заголовок: Dia2.h

Библиотеки: diaguids.lib

Библиотеки DLL: msdia80.dll

См. также

Ссылки

IDiaEnumSegments::Item

IDiaEnumSegments::Next

Другие ресурсы

Интерфейсы (SDK для доступа к интерфейсу отладки)