IDiaSegment
Данные сопоставления из номера секции к сегментам адресного пространства.
IDiaSegment : IUnknown
Методы в том порядке Vtable
В следующей таблице показаны методы IDiaSegment.
Метод |
Описание |
---|---|
Извлекает число сегментов. |
|
Получает смещение в сегментах где раздел. |
|
Извлекает число байтов в сегменте. |
|
Извлекает пометить, указывающее, является ли сегмент можно считать. |
|
Извлекает пометить, указывающее, является ли сегмент может быть изменен. |
|
Извлекает пометить, указывающее, является ли сегмент исполнительн. |
|
Получает номер секции, который сопоставляет на этот сегмент. |
|
Получает относительный виртуальный адрес RVA) (начальной секции. |
|
Получает виртуальный адрес () 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