从节号的数据映射到地址空间的段。
IDiaSegment : IUnknown
方法按 Vtable 顺序
下表显示 IDiaSegment方法。
方法 |
说明 |
---|---|
检索段号。 |
|
检索在部分开始的段的偏移量。 |
|
检索字节数段落的。 |
|
检索指示的标志段是否可以读取。 |
|
检索指示的标志是否可修改段。 |
|
检索指示的标志前段是可执行文件。 |
|
检索节号该映射到此段。 |
|
检索节的开始的相对 (RVA)虚拟地址。 |
|
检索节的开始的 (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