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