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. |
Remarques
Étant donné que le SDK DIA effectue déjà la traduction des adresses de la section de décalage en adresses virtuelles relatives, la plupart des applications n’utilisent pas les informations fournies dans le mappage 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
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour