Share via


IDiaEnumSymbolsByAddr

列舉各種資料來源中所包含的符號的位址。

IDiaEnumSymbolsByAddr : IUnknown

方法 Vtable 順序

下表顯示的方法IDiaEnumSymbolsByAddr

方法

描述

IDiaEnumSymbolsByAddr::symbolByAddr

藉由執行對應的區段] 與 [位移位置的列舉值。

IDiaEnumSymbolsByAddr::symbolByRVA

定位列舉值的相對虛擬位址 (RVA) 執行查詢。

IDiaEnumSymbolsByAddr::symbolByVA

藉由執行對應的虛擬位址 (VA) 中放置列舉值。

IDiaEnumSymbolsByAddr::Next

位址所擷取的順序的下一個符號。 更新列舉值位置擷取的項目數目。

IDiaEnumSymbolsByAddr::Prev

藉由前一個符號的順序來擷取位址。 更新列舉值位置擷取的項目數目。

IDiaEnumSymbolsByAddr::Clone

製作物件的複本。

備註

這個介面會提供地址來分組的符號。 若要使用符號按類型分組,例如SymTagUDT (使用者定義型別) 或SymTagBaseClass,使用IDiaEnumSymbols介面。

呼叫者的備忘稿

取得這個介面,藉由呼叫IDiaSession::getSymbolsByAddr方法。

範例

這個函式會顯示排序的相對虛擬位址的所有符號的位址與名稱。

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

需求

標頭: Dia2.h

媒體櫃: diaguids.lib

DLL: msdia80.dll

請參閱

參考

IDiaSession::getSymbolsByAddr

IDiaEnumSymbols

其他資源

介面 (偵錯介面存取 SDK)