IDiaSegment
Карты данные из номера раздела в сегменты адресного пространства.
Синтаксис
IDiaSegment : IUnknown
Методы в порядке таблицы Vtable
В следующей таблице показаны методы IDiaSegment
.
Метод | Description |
---|---|
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 DIA уже выполняет переводы из смещения раздела на относительные виртуальные адреса, большинство приложений не будут использовать сведения на карте сегментов.
Заметки для вызывающих абонентов
Получите этот интерфейс, вызвав методы IDiaEnumSegments::Item или 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 ] );
}
}
}
}
}
Requirements
Заголовок: Dia2.h
Библиотека: diaguids.lib
DLL: msdia80.dll
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по