Partilhar via


IDiaSegment

Mapeia os dados contra o número de seção para segmentos de espaço de endereço.

IDiaSegment : IUnknown

Métodos na ordem de Vtable

A tabela a seguir mostra os métodos de IDiaSegment.

Método

Descrição

IDiaSegment::get_frame

Recupera o número de segmento.

IDiaSegment::get_offset

Recupera o deslocamento em segmentos onde a seção começa.

IDiaSegment::get_length

Recupera o número de bytes no 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 de seção que mapeia para esse segmento.

IDiaSegment::get_relativeVirtualAddress

Recupera o endereço virtual relativo (RVA) do início da seção.

IDiaSegment::get_virtualAddress

Recupera o endereço virtual (VA) do início da seção.

Comentários

Como o SDK DIA já realiza traduções do deslocamento de seção para endereços virtuais relativos, a maioria dos aplicativos não fará uso das informações no mapa do segmento.

Observações para chamadores

Obter essa interface chamando o IDiaEnumSegments::Item ou IDiaEnumSegments::Next métodos. Consulte o exemplo para obter detalhes.

Exemplo

Esta 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

Consulte também

Referência

IDiaEnumSegments::Item

IDiaEnumSegments::Next

Outros recursos

Interfaces (SDK de Acesso à Interface de Depuração)