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