Partager via


IDiaSegment

Données de mappage du nombre de section aux segments de l'espace d'adressage.

IDiaSegment : IUnknown

méthodes en commande de Vtable

Le tableau suivant répertorie les méthodes d' IDiaSegment.

Méthode

Description

IDiaSegment::get_frame

Récupère le numéro du segment.

IDiaSegment::get_offset

Récupère l'offset dans les segments où la section démarre.

IDiaSegment::get_length

Récupère le nombre d'octets dans le segment.

IDiaSegment::get_read

extrait une balise qui indique si le segment peut être lu.

IDiaSegment::get_write

extrait une balise qui indique si le segment peut être modifié.

IDiaSegment::get_execute

extrait une balise qui indique si le segment est exécutable.

IDiaSegment::get_addressSection

Récupère le numéro de section mappée à ce segment.

IDiaSegment::get_relativeVirtualAddress

Récupère l'adresse virtuelle relative (RVA) du début de la section.

IDiaSegment::get_virtualAddress

Récupère l'adresse (VA) virtuelle de début de la section.

Notes

Étant donné que le diamètre Kit de développement logiciel exécute déjà les traductions de la section décalés à des adresses virtuelles relatives, la plupart des applications ne se serviront pas des informations dans le mappage de segment.

Remarques pour les appelants

obtenez cette interface en appelant les méthodes d' IDiaEnumSegments::Item ou d' IDiaEnumSegments::Next . Consultez l'exemple pour plus de détails.

Exemple

cette fonction affiche l'adresse de tous les segments dans un tableau et le symbole le plus proche.

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 ] );
                }
            }
        }
    }
}

Configuration requise

en-tête : Dia2.h

bibliothèque : diaguids.lib

DLL : msdia80.dll

Voir aussi

Référence

IDiaEnumSegments::Item

IDiaEnumSegments::Next

Autres ressources

Interfaces (Kit de développement logiciel de Debug Interface Access)