Partilhar via


IDiaEnumSymbolsByAddr2

Enumera por endereço os vários símbolos contidos na fonte de dados.

Sintaxe

IDiaEnumSymbolsByAddr2 : IDiaEnumSymbolsByAdd

Métodos na ordem VTable

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

Método Descrição
IDiaEnumSymbolsByAddr2::symbolByAddrEx Posiciona o enumerador executando uma pesquisa por deslocamento e seção.
IDiaEnumSymbolsByAddr2::symbolByRVAEx Posiciona o enumerador executando uma pesquisa de RVA (endereço virtual relativo).
IDiaEnumSymbolsByAddr2::symbolByVAEx Posiciona o enumerador executando uma pesquisa por VA (endereço virtual).
IDiaEnumSymbolsByAddr2::NextEx Recupera os próximos símbolos em ordem, por endereço. Atualiza a posição do enumerador pelo número de elementos buscados.
IDiaEnumSymbolsByAddr2::PrevEx Recupera os símbolos anteriores em ordem, por endereço. Atualiza a posição do enumerador pelo número de elementos buscados.

Comentários

Essa interface fornece símbolos agrupados por endereço. Para trabalhar com símbolos agrupados por tipo, por exemplo SymTagUDT (tipo definido pelo usuário) ou SymTagBaseClass, use a IDiaEnumSymbols interface.

Observações para chamadores

Obtenha essa interface chamando o IDiaSession::getSymbolsByAddr método e, em seguida, chamando IUnknown::QueryInterface com o riid parâmetro definido como IID_IDiaEnumSymbolsByAddr2.

Exemplo

Essa função exibe o nome e o endereço de todos os símbolos ordenados por endereço virtual relativo.

void ShowSymbolsByAddress(IDiaSession *pSession)
{
    CComPtr<IDiaEnumSymbolsByAddr> pEnumByAddr;
    if ( FAILED( psession->getSymbolsByAddr( &pEnumByAddr ) ) )
    {
        Fatal( "getSymbolsByAddr" );
    }
    CComPtr<IDiaEnumSymbolsByAddr2> pEnumByAddr2;
    if ( FAILED( pEnumByAddr->QueryInterface( IID_IDiaEnumSymbolsByAddr2, &pEnumByAddr2 ) ) )
    {
        Fatal( "getSymbolsByAddr" );
    }
    CComPtr<IDiaSymbol> pSym;
    if ( FAILED( pEnumByAddr2->symbolByAddrEx( FALSE, 1, 0, &pSym ) ) )
    {
        Fatal( "symbolByAddr" );
    }
    DWORD rvaLast = 0;
    if ( pSym->get_relativeVirtualAddress( &rvaLast ) == S_OK )
    {
        pSym = 0;
        if ( FAILED( pEnumByAddr2->symbolByRVAEx( FALSE, rvaLast, &pSym ) ) )
        {
            Fatal( "symbolByAddr" );
        }
        printf( "Symbols in order\n" );
        do
        {
            CDiaBSTR name;
            if ( pSym->get_name( &name ) != S_OK )
            {
                printf( "\t0x%08X (%ws) <no name>\n", rvaLast );
            }
            else
            {
                printf( "\t0x%08X %ws\n", rvaLast, name );
            }
            pSym = 0;
            celt = 0;
            if ( FAILED( hr = pEnumByAddr2->NextEx( FALSE, 1, &pSym, &celt ) ) )
            {
                break;
            }
        } while ( celt == 1 );
    }
}

Requisitos

Cabeçalho: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia140.dll

Confira também