Sdílet prostřednictvím


IDiaSegment

Mapy data z čísla oddílu do segmentů adresního prostoru.

Syntaxe

IDiaSegment : IUnknown

Metody v pořadí Vtable

Následující tabulka ukazuje metody IDiaSegment.

metoda Popis
IDiaSegment::get_frame Načte číslo segmentu.
IDiaSegment::get_offset Načte posun v segmentech, kde začíná oddíl.
IDiaSegment::get_length Načte počet bajtů v segmentu.
IDiaSegment::get_read Načte příznak, který označuje, jestli je možné segment přečíst.
IDiaSegment::get_write Načte příznak, který označuje, jestli je možné segment upravit.
IDiaSegment::get_execute Načte příznak, který označuje, jestli je segment spustitelný.
IDiaSegment::get_addressSection Načte číslo oddílu, které se mapuje na tento segment.
IDiaSegment::get_relativeVirtualAddress Načte relativní virtuální adresu (RVA) na začátku oddílu.
IDiaSegment::get_virtualAddress Načte virtuální adresu (VA) začátku oddílu.

Poznámky

Vzhledem k tomu, že sada DIA SDK již provádí překlady z posunu oddílu na relativní virtuální adresy, většina aplikací nebude využívat informace v mapě segmentů.

Poznámky pro volající

Získejte toto rozhraní voláním IDiaEnumSegments::Item nebo IDiaEnumSegments::Next metody. Podrobnosti najdete v příkladu.

Příklad

Tato funkce zobrazí adresu všech segmentů v tabulce a nejbližší symbol.

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

Požadavky

Hlavička: Dia2.h

Knihovna: diaguids.lib

DLL: msdia80.dll

Viz také