Поделиться через


IDiaSectionContrib

Извлекает данные, описывающие вклад раздела, то есть непрерывный блок памяти, внесенный в образ компилятором.

Синтаксис

IDiaSectionContrib : IUnknown

Методы в порядке таблицы Vtable

В следующей таблице показаны методы IDiaSectionContrib.

Метод Description
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_code16bit Извлекает флаг, указывающий, содержит ли раздел 16-разрядный код.
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 сведений о перемещении для раздела.
IDiaLineNumber::get_compilandId Извлекает идентификатор компилятора для раздела.

Замечания

Заметки для вызывающих абонентов

Этот интерфейс получен путем вызова методов IDiaEnumSectionContribs::Item и IDiaEnumSectionContribs::Next . Пример получения IDiaSectionContrib интерфейса см. в интерфейсе IDiaEnumSectionContribs.

Пример

Эта функция отображает адрес каждого раздела вместе с любыми связанными символами. Ознакомьтесь с интерфейсом 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" );
            }
        }
    }
}

Requirements

Заголовок: Dia2.h

Библиотека: diaguids.lib

DLL: msdia80.dll

См. также