Aracılığıyla paylaş


IDiaEnumSymbolsByAddr2

Veri kaynağında bulunan çeşitli sembolleri adrese göre numaralandırır.

Sözdizimi

IDiaEnumSymbolsByAddr2 : IDiaEnumSymbolsByAdd

Vtable Sırasına Göre Yöntemler

Aşağıdaki tabloda yönteminin yöntemleri gösterilmektedir IDiaEnumSymbolsByAddr2.

Metot Açıklama
IDiaEnumSymbolsByAddr2::symbolByAddrEx Bölüme ve uzaklık değerine göre arama yaparak numaralandırıcıyı konumlandırın.
IDiaEnumSymbolsByAddr2::symbolByRVAEx Göreli sanal adrese (RVA) göre arama yaparak numaralandırıcıyı konumlandırır.
IDiaEnumSymbolsByAddr2::symbolByVAEx Sanal adrese (VA) göre arama yaparak numaralandırıcıyı konumlandırın.
IDiaEnumSymbolsByAddr2::NextEx Sonraki simgeleri adrese göre sırasıyla alır. Numaralandırıcı konumunu getirilen öğe sayısına göre güncelleştirir.
IDiaEnumSymbolsByAddr2::PrevEx Önceki simgeleri adrese göre sırasıyla alır. Numaralandırıcı konumunu getirilen öğe sayısına göre güncelleştirir.

Açıklamalar

Bu arabirim adrese göre gruplandırılmış simgeler sağlar. Türe göre gruplandırılmış simgelerle çalışmak için (kullanıcı SymTagUDT tanımlı tür) veya SymTagBaseClassarabirimini IDiaEnumSymbols kullanın.

Arayanlar için notlar

yöntemini çağırıp IDiaSession::getSymbolsByAddr parametresi olarak ayarlanmış IID_IDiaEnumSymbolsByAddr2olarak çağırarak IUnknown::QueryInterface riid bu arabirimi alın.

Örnek

Bu işlev, göreli sanal adrese göre sıralanmış tüm simgelerin adını ve adresini görüntüler.

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 );
    }
}

Gereksinimler

Üst bilgi: Dia2.h

Kitaplık: diaguids.lib

DLL: msdia140.dll

Ayrıca bkz.