IDiaSegment
Mappe les données du numéro de section à des segments d’espace d’adressage.
Syntax
IDiaSegment : IUnknown
Méthodes dans l'ordre Vtable
Le tableau suivant présente les méthodes de IDiaSegment
.
Méthode | Description |
---|---|
IDiaSegment::get_frame | Récupère le numéro de segment. |
IDiaSegment::get_offset | Récupère le décalage, en segments, où commence la section. |
IDiaSegment::get_length | Récupère le nombre d’octets dans le segment. |
IDiaSegment::get_read | Récupère un indicateur qui spécifie si le segment peut être lu. |
IDiaSegment::get_write | Récupère un indicateur qui spécifie si le segment peut être modifié. |
IDiaSegment::get_execute | Récupère un indicateur qui spécifie si le segment est exécutable. |
IDiaSegment::get_addressSection | Récupère le numéro de section mappé à 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 virtuelle (VA) du début de la section. |
Notes
Étant donné que le SDK Dia (Debug Interface Access) effectue déjà des traductions du décalage de section vers des adresses virtuelles relatives, la plupart des applications n’utilisent pas les informations de la carte de segments.
Remarques pour les appelants
Obtenez cette interface en appelant les méthodes IDiaEnumSegments::Item ou IDiaEnumSegments::Next. Pour plus de détails, voir les exemples.
Exemple
Cette fonction affiche l’adresse de tous les segments d’une table 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