IDiaSegment
Mapeia dados do número da seção para segmentos de espaço de endereço.
Sintaxe
IDiaSegment : IUnknown
Métodos na ordem VTable
A tabela a seguir mostra os métodos de IDiaSegment
.
Método | Descrição |
---|---|
IDiaSegment::get_frame | Recupera o número do segmento. |
IDiaSegment::get_offset | Recupera o deslocamento, em segmentos, em que a seção começa. |
IDiaSegment::get_length | Recupera o número de bytes em um segmento. |
IDiaSegment::get_read | Recupera um sinalizador que indica se o segmento pode ser lido. |
IDiaSegment::get_write | Recupera um sinalizador que indica se o segmento pode ser modificado. |
IDiaSegment::get_execute | Recupera um sinalizador que indica se o segmento é executável. |
IDiaSegment::get_addressSection | Recupera o número da seção que é mapeado para este segmento. |
IDiaSegment::get_relativeVirtualAddress | Recupera o VA (endereço virtual relativo) do início da seção. |
IDiaSegment::get_virtualAddress | Recupera o VA (endereço virtual) do início da seção. |
Comentários
Como o SDK do DIA (Acesso à Interface de Depuração) já executa traduções do deslocamento de seção para endereços virtuais relativos, a maioria dos aplicativos não usará as informações no mapa de segmentos.
Observações para chamadores
Obtenha essa interface chamando os métodos IDiaEnumSegments::Item ou IDiaEnumSegments::Next. Consulte este exemplo para obter detalhes.
Exemplo
Essa função exibe o endereço de todos os segmentos em uma tabela e o símbolo mais próximo.
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 ] );
}
}
}
}
}
Requisitos
Cabeçalho: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll