IDiaSectionContrib

检索描述节贡献的数据,即由编译单位贡献给图像的连续内存块。

语法

IDiaSectionContrib : IUnknown

Vtable 顺序中的方法

下表显示了 IDiaSectionContrib 方法。

方法 说明
IDiaSectionContrib::get_compiland 检索对提供本节的编译单位符号的引用。
IDiaSectionContrib::get_addressSection 检索贡献地址的节部分。
IDiaSectionContrib::get_addressOffset 检索贡献地址的偏移量部分。
IDiaSectionContrib::get_relativeVirtualAddress 检索贡献的图像相对虚拟地址 (RVA)。
IDiaSectionContrib::get_virtualAddress 检索贡献的虚拟地址 (VA)。
IDiaSectionContrib::get_length 检索节中的字节数。
IDiaSectionContrib::get_notPaged 检索一个标志,该标志指示节是否无法分页出内存。
IDiaSectionContrib::get_nopad 检索一个标志,该标志指示是否不应将节填充到下一个内存边界。
IDiaSectionContrib::get_code 返回指示节是否包含可执行代码的标记。
IDiaSectionContrib::get_initializedData 检索一个标记,该标记指示节是否包含已初始化的数据。
IDiaSectionContrib::get_uninitializedData 检索一个标记,该标记指示节是否包含未初始化的数据。
IDiaSectionContrib::get_informational 检索一个标记,该标记指示节是否包含注释或类似的信息。
IDiaSectionContrib::get_remove 检索一个标记,该标记指示是否在节成为内存中映像的一部分之前删除该节。
IDiaSectionContrib::get_comdat 检索一个标志,该标志指示节是否为 COMDAT 记录。
IDiaSectionContrib::get_discardable 检索指示是否可以放弃节的标记。
IDiaSectionContrib::get_notCached 检索一个标记,该标记指示是否无法缓存节。
IDiaSectionContrib::get_share 检索一个标记,该标记指示是否可以在内存中共享节。
IDiaSectionContrib::get_execute 检索一个标志,该标志指示该节是否可以作为代码执行。
IDiaSectionContrib::get_read 检索指示是否可以读取节的标志。
IDiaSectionContrib::get_write 检索指示是否可以写入节的标志。
IDiaSectionContrib::get_dataCrc 检索节中数据的循环冗余检验 (CRC)。
IDiaSectionContrib::get_relocationsCrc 检索节的重定位信息的 CRC。
IDiaSectionContrib::get_compilandId 检索节的编译单位标识符。
IDiaSectionContrib::get_code16bit 返回指示节是否包含 16 位代码的标志。

注解

对调用者的说明

通过调用 IDiaEnumSectionContribs::ItemIDiaEnumSectionContribs::Next 方法获取此接口。 IDiaEnumSectionContribs有关获取IDiaSectionContrib接口的示例,请参阅接口。

示例

此函数显示每个节的地址以及任何关联的符号。 IDiaEnumSectionContribs请参阅接口,了解接口的获取方式IDiaSectionContrib

void PrintSectionContrib(IDiaSectionContrib* pSecContrib, IDiaSession* pSession)
{
    if (pSecContrib != NULL && pSession != NULL)
    {
        DWORD rva;
        if ( pSecContrib->get_relativeVirtualAddress( &rva ) == S_OK )
        {
            printf( "\taddr: 0x%.8X", rva );
            pSecContrib = 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( "     symbol: %ws (%ws)\n",
                        name != NULL ? name : L"",
                        szTags[ tag ] );
            }
            else
            {
                printf( "<no symbol found?>\n" );
            }
        }
        else
        {
            DWORD isect;
            DWORD offset;
            pSecContrib->get_addressSection( &isect );
            pSecContrib->get_addressOffset( &offset );
            printf( "\taddr: 0x%.4X:0x%.8X", isect, offset );
            pSecContrib = NULL;
            CComPtr<IDiaSymbol> pSym;
            if ( SUCCEEDED( psession->findSymbolByAddr(
                                              isect,
                                              offset,
                                              SymTagNull,
                                              &pSym )
                          )
               )
            {
                CDiaBSTR name;
                DWORD    tag;
                pSym->get_symTag( &tag );
                pSym->get_name( &name );
                printf( "     symbol: %ws (%ws)\n",
                    name != NULL ? name : L"",
                    szTags[ tag ] );
            }
            else
            {
                printf( "<no symbol found?>\n" );
            }
        }
    }
}

要求

标头:Dia2.h

库:diaguids.lib

DLL:msdia140.dll

另请参阅