IDiaSegment
Maps data from the section number to segments of address space.
Syntax
IDiaSegment : IUnknown
Methods in Vtable Order
The following table shows the methods of IDiaSegment
.
Method | Description |
---|---|
IDiaSegment::get_frame | Retrieves the segment number. |
IDiaSegment::get_offset | Retrieves the offset in segments where the section begins. |
IDiaSegment::get_length | Retrieves the number of bytes in the segment. |
IDiaSegment::get_read | Retrieves a flag that indicates whether the segment can be read. |
IDiaSegment::get_write | Retrieves a flag that indicates whether the segment can be modified. |
IDiaSegment::get_execute | Retrieves a flag that indicates whether the segment is executable. |
IDiaSegment::get_addressSection | Retrieves the section number that maps to this segment. |
IDiaSegment::get_relativeVirtualAddress | Retrieves the relative virtual address (RVA) of the beginning of the section. |
IDiaSegment::get_virtualAddress | Retrieves the virtual address (VA) of the beginning of the section. |
Remarks
Because the Debug Interface Access (DIA) SDK already performs translations from the section offset to relative virtual addresses, most applications will not make use of the information in the segment map.
Notes for Callers
Obtain this interface by calling the IDiaEnumSegments::Item or IDiaEnumSegments::Next methods. See the example for details.
Example
This function displays the address of all segments in a table and the nearest symbol.
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 ] );
}
}
}
}
}
Requirements
Header: Dia2.h
Library: diaguids.lib
DLL: msdia80.dll