IDiaEnumSymbolsByAddr

Hitung berdasarkan alamat berbagai simbol yang terkandung dalam sumber data.

Sintaks

IDiaEnumSymbolsByAddr : IUnknown

Metode dalam Urutan Vtable

Tabel berikut memperlihatkan metode IDiaEnumSymbolsByAddr.

Metode Deskripsi
IDiaEnumSymbolsByAddr::symbolByAddr Memosisikan enumerator dengan melakukan pencarian berdasarkan bagian dan offset.
IDiaEnumSymbolsByAddr::symbolByRVA Memosisikan enumerator dengan melakukan pencarian dengan alamat virtual relatif (RVA).
IDiaEnumSymbolsByAddr::symbolByVA Memosisikan enumerator dengan melakukan pencarian berdasarkan alamat virtual (VA).
IDiaEnumSymbolsByAddr::Next Mengambil simbol berikutnya secara berurutan berdasarkan alamat. Memperbarui posisi enumerator berdasarkan jumlah elemen yang diambil.
IDiaEnumSymbolsByAddr::Prev Mengambil simbol sebelumnya secara berurutan berdasarkan alamat. Memperbarui posisi enumerator berdasarkan jumlah elemen yang diambil.
IDiaEnumSymbolsByAddr::Clone Membuat salinan objek.

Keterangan

Antarmuka ini menyediakan simbol yang dikelompokkan menurut alamat. Untuk bekerja dengan simbol yang dikelompokkan menurut jenis, misalnya SymTagUDT (jenis yang ditentukan pengguna) atau SymTagBaseClass, gunakan antarmuka IDiaEnumSymbols.

Catatan untuk Penelepon

Dapatkan antarmuka ini dengan memanggil metode IDiaSession::getSymbolsByAddr.

Contoh

Fungsi ini menampilkan nama dan alamat semua simbol yang diurutkan berdasarkan alamat virtual relatif.

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

Persyaratan

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

Baca juga