共用方式為


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 擷取一個旗標,該旗標指示某個區段是否可以被系統移出記憶體分頁 (paging)。
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::Next 方法可取得IDiaEnumSectionContribs::Item這個介面。 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

另請參閱