Compartir vía


IDiaEnumSymbolsByAddr2

Enumera por dirección los distintos símbolos contenidos en el origen de datos.

Syntax

IDiaEnumSymbolsByAddr2 : IDiaEnumSymbolsByAdd

Métodos en orden de Vtable

En la tabla siguiente se muestran los métodos de IDiaEnumSymbolsByAddr2.

Método Descripción
IDiaEnumSymbolsByAddr2::symbolByAddrEx Sitúa el enumerador realizando una búsqueda por sección y desplazamiento.
IDiaEnumSymbolsByAddr2::symbolByRVAEx Coloca el enumerador realizando una búsqueda por dirección virtual relativa (RVA).
IDiaEnumSymbolsByAddr2::symbolByVAEx Coloca el enumerador realizando una búsqueda por dirección virtual (VA).
IDiaEnumSymbolsByAddr2::NextEx Recupera los símbolos siguientes en orden por dirección. Actualiza la posición del enumerador por el número de elementos capturados.
IDiaEnumSymbolsByAddr2::PrevEx Recupera los símbolos anteriores en orden por dirección. Actualiza la posición del enumerador por el número de elementos capturados.

Comentarios

Esta interfaz proporciona símbolos agrupados por dirección. Para trabajar con símbolos agrupados por tipo, por ejemplo SymTagUDT (tipo definido por el usuario) o SymTagBaseClass, use la IDiaEnumSymbols interfaz .

Notas para los autores de llamadas

Obtenga esta interfaz llamando al IDiaSession::getSymbolsByAddr método y, a continuación, llamando a IUnknown::QueryInterface con el riid parámetro establecido en IID_IDiaEnumSymbolsByAddr2.

Ejemplo

Esta función muestra el nombre y la dirección de todos los símbolos ordenados por dirección virtual relativa.

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

Encabezado: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia140.dll

Consulte también