다음을 통해 공유


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

참고 항목