Partilhar via


IDiaEnumSymbolsByAddr

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

Sintaxe

IDiaEnumSymbolsByAddr : IUnknown

Métodos na ordem VTable

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

Método Descrição
IDiaEnumSymbolsByAddr::symbolByAddr Posiciona o enumerador executando uma pesquisa por deslocamento e seção.
IDiaEnumSymbolsByAddr::symbolByRVA Posiciona o enumerador executando uma pesquisa de RVA (endereço virtual relativo).
IDiaEnumSymbolsByAddr::symbolByVA Posiciona o enumerador executando uma pesquisa por VA (endereço virtual).
IDiaEnumSymbolsByAddr::Next Recupera os próximos símbolos em ordem, por endereço. Atualiza a posição do enumerador pelo número de elementos buscados.
IDiaEnumSymbolsByAddr::Prev Recupera os símbolos anteriores em ordem, por endereço. Atualiza a posição do enumerador pelo número de elementos buscados.
IDiaEnumSymbolsByAddr::Clone Faz uma cópia de um objeto.

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 interface IDiaEnumSymbols.

Observações para chamadores

Obtenha essa interface chamando o método IDiaSession::getSymbolsByAddr.

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<IDiaSymbol> pSym;
    if ( FAILED( pEnumByAddr->symbolByAddr( 1, 0, &pSym ) ) )
    {
        Fatal( "symbolByAddr" );
    }
    DWORD rvaLast = 0;
    if ( pSym->get_relativeVirtualAddress( &rvaLast ) == S_OK )
    {
        pSym = 0;
        if ( FAILED( pEnumByAddr->symbolByRVA( 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 = pEnumByAddr->Next( 1, &pSym, &celt ) ) )
            {
                break;
            }
        } while ( celt == 1 );
    }
}

Requisitos

Cabeçalho: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia80.dll

Confira também