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::ItemIDiaEnumSegments::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

请参见

参考

IDiaEnumSegments::Item

IDiaEnumSegments::Next

其他资源

接口(调试接口访问 SDK)