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