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