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. |
Comentarios
Dado que el SDK de acceso a la interfaz de depuración (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