由多个符号在数据源中包含的地址枚举。
IDiaEnumSymbolsByAddr : IUnknown
方法按 Vtable 顺序
下表显示 IDiaEnumSymbolsByAddr方法。
方法 |
说明 |
---|---|
通过执行查找确定枚举数由部分和扭曲。 |
|
通过执行查找确定枚举数由相对虚拟地址 (RVA)。 |
|
通过执行查找确定枚举数由虚拟地址 (VA)。 |
|
由地址检索下符号按顺序。所获取的元素数更新枚举数位置。 |
|
由地址检索以前的符号按顺序。所获取的元素数更新枚举数位置。 |
|
复制该对象。 |
备注
此接口提供地址分组的符号。例如若要使用类型分组符号时, SymTagUDT (用户定义的类型) 或 SymTagBaseClass,请使用 IDiaEnumSymbols 接口。
调用方的说明
通过调用 IDiaSession::getSymbolsByAddr 方法获取此接口。
示例
此功能公开相对虚拟地址 (rva) 排序的所有符号名称和地址。
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