Share via


IDiaSegment

Asigna datos del número de sección a segmentos del espacio de direcciones.

Sintaxis

IDiaSegment : IUnknown

Métodos en orden de Vtable

En la tabla siguiente se muestran los métodos de IDiaSegment.

Método Descripción
IDiaSegment::get_frame Recupera el número de segmento.
IDiaSegment::get_offset Recupera el desplazamiento en segmentos donde comienza la sección.
IDiaSegment::get_length Recupera el número de bytes del segmento.
IDiaSegment::get_read Recupera una marca que indica si se puede leer el segmento.
IDiaSegment::get_write Recupera una marca que indica si se puede modificar el segmento.
IDiaSegment::get_execute Recupera una marca que indica si el segmento es ejecutable.
IDiaSegment::get_addressSection Recupera el número de sección que se asigna a este segmento.
IDiaSegment::get_relativeVirtualAddress Recupera la dirección virtual relativa (RVA) del principio de la sección.
IDiaSegment::get_virtualAddress Recupera la dirección virtual (VA) del principio de la sección.

Observaciones

Dado que el SDK de DIA ya realiza traducciones desde el desplazamiento de sección a direcciones virtuales relativas, la mayoría de las aplicaciones no usarán la información del mapa de segmentos.

Notas para autores de la llamada

Para obtener esta interfaz, llame a los métodos IDiaEnumSegments::Item o IDiaEnumSegments::Next. Consulte el ejemplo para más información.

Ejemplo

Esta función muestra la dirección de todos los segmentos de una tabla y el símbolo más cercano.

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

Requisitos

Encabezado: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia80.dll

Vea también