다음을 통해 공유


IDiaSegment

데이터를 섹션 번호에서 주소 공간의 세그먼트로 매핑합니다.

구문

IDiaSegment : IUnknown

Vtable 순서의 메서드

다음 표에서는 IDiaSegment 메서드를 보여 줍니다.

메서드 설명
IDiaSegment::get_frame 세그먼트 번호를 검색합니다.
IDiaSegment::get_offset 섹션을 시작하는 세그먼트의 오프셋을 검색합니다.
IDiaSegment::get_length 세그먼트의 바이트 수를 검색합니다.
IDiaSegment::get_read 세그먼트를 읽을 수 있는지 나타내는 플래그를 검색합니다.
IDiaSegment::get_write 세그먼트를 수정할 수 있는지 나타내는 플래그를 검색합니다.
IDiaSegment::get_execute 세그먼트가 실행 가능한지 나타내는 플래그를 검색합니다.
IDiaSegment::get_addressSection 이 세그먼트에 매핑되는 섹션 번호를 검색합니다.
IDiaSegment::get_relativeVirtualAddress 섹션 시작 부분의 RVA(상대 가상 주소)를 검색합니다.
IDiaSegment::get_virtualAddress 섹션 시작 부분의 VA(가상 주소)를 검색합니다.

설명

DIA(디버그 인터페이스 액세스) SDK는 이미 섹션 오프셋에서 상대 가상 주소로의 변환을 수행하므로 대부분의 애플리케이션은 세그먼트 맵의 정보를 사용하지 않습니다.

호출자 참고 사항

IDiaEnumSegments::Item 메서드 또는 IDiaEnumSegments::Next 메서드를 호출하여 이 인터페이스를 가져옵니다. 자세한 내용은 예제를 참조하세요.

예시

이 함수는 테이블의 모든 세그먼트 주소와 가장 가까운 기호를 표시합니다.

void ShowSegments(IDiaTable *pTable, IDiaSession *pSession)
{
    CComPtr<IDiaEnumSegments> pSegments;
    if ( SUCCEEDED( pTable->QueryInterface(
                                _uuidof( IDiaEnumSegments ),
                               (void**)&pSegments )
                  )
       )
    {
        CComPtr<IDiaSegment> pSegment;
        while ( SUCCEEDED( hr = pSegments->Next( 1, &pSegment, &celt ) ) &&
                celt == 1 )
        {
            DWORD rva;
            DWORD seg;

            pSegment->get_addressSection( &seg );
            if ( pSegment->get_relativeVirtualAddress( &rva ) == S_OK )
            {
                printf( "Segment %i addr: 0x%.8X\n", seg, rva );
                pSegment = NULL;

                CComPtr<IDiaSymbol> pSym;
                if ( psession->findSymbolByRVA( rva, SymTagNull, &pSym ) == S_OK )
                {
                    CDiaBSTR name;
                    DWORD    tag;

                    pSym->get_symTag( &tag );
                    pSym->get_name( &name );
                    printf( "\tClosest symbol: %ws (%ws)\n",
                            name != NULL ? name : L"",
                            szTags[ tag ] );
                }
            }
        }
    }
}

요구 사항

헤더: Dia2.h

라이브러리: diaguids.lib

DLL: msdia80.dll

참고 항목