Partager via


Objets de mémoire TTD

Description

La mémoire TTD est une méthode qui prend les paramètres beginAddress, endAddress et dataAccessMask et renvoie une collection d’objets mémoire contenant des informations d’accès à la mémoire.

Paramètres

Propriété Description
beginAddress L’adresse de début de l’objet mémoire est précédée de 0x.
endAddress L’adresse de fin de l’objet mémoire est précédée de 0x.
dataAccessMask Le masque d’accès aux données est contenu entre guillemets. Cela peut être r pour lecture, w pour écriture, e pour exécution et c pour changement.

Children

Object Description
EventType le type d’événement ; C’est « MemoryAccess » pour tous les objets TTD.Memory.
ThreadId L’ID de thread du système d’exploitation du thread qui a fait la demande.
UniqueThreadId Un ID unique pour le thread à travers la trace. Les IDs de thread réguliers peuvent être réutilisés au cours de la durée de vie d’un processus mais les UniqueThreadIds ne peuvent pas l’être.
TimeStart Un objet de position qui décrit la position lors de l’accès à la mémoire.
TimeEnd Un objet de position qui décrit la position lors de l’accès à la mémoire. Ce sera toujours le même que le TimeStart pour les objets TTD.Memory.
AccessType Le type d’accès - Lecture, Écriture ou Exécution.
IP Le pointeur d’instruction du code qui a effectué l’accès à la mémoire.
Adresse L’adresse qui a été lue / écrite / exécutée et sera dans la plage de [beginAddress, endAddress) des paramètres de .Memory(). Notez que l’intervalle est semi-ouvert. C’est-à-dire qu’aucun des événements renvoyés n’aura une adresse correspondant à endAddress mais il pourrait y avoir des événements correspondant à endAddress – 1.
Taille La taille de la lecture/écriture/exécution en octets. Cela sera généralement de 8 octets ou moins. En cas d’exécution de code, il s’agit du nombre d’octets de l’instruction qui a été exécutée.
Valeur La valeur qui a été lue, écrite ou exécutée. Dans le cas de l’exécution, elle contient les octets de code de l’instruction. Notez que les octets d’instruction sont listés en ordre MSB par le désassembleur mais seront stockés dans value en ordre LSB.

Notes

Les types d’accès suivants sont autorisés dans les requêtes TTD.Memory :

  • r : lecture
  • w : écriture
  • rw : lecture/écriture
  • e : exécution
  • rwe : lecture / écriture / exécution
  • ec : exécution / changement

Notez qu’il s’agit d’une fonction qui effectue un calcul, elle prend donc un certain temps pour s’exécuter.

Exemple d’utilisation

Cet exemple montre un affichage en grille de toutes les positions dans la trace où les quatre octets de mémoire à partir de 0x00a4fca0 ont été accédés en lecture. Cliquez sur n’importe quelle entrée pour approfondir chaque occurrence d’accès à la mémoire.

dx -g @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")

Capture d’écran de l’exemple de grille d’affichage d’objet mémoire dx.

Vous pouvez cliquer sur les champs TimeStart dans l’un des événements de l’affichage en grille, pour afficher les informations de cet événement.

0:000> dx -r1 @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")[16].TimeStart
@$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")[16].TimeStart                 : 5D:113 [Time Travel]
    Sequence         : 0x5d
    Steps            : 0x113

Pour passer à la position dans la trace où l’événement s’est produit, cliquez sur [Time Travel].

0:000> dx @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")[16].TimeStart.SeekTo()
@$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")[16].TimeStart.SeekTo()
(27b8.3168): Break instruction exception - code 80000003 (first/second chance not available)
Time Travel Position: 5D:113

eax=0000004c ebx=00dd0000 ecx=00a4f89c edx=00a4f85c esi=00a4f89c edi=00b61046
eip=690795e5 esp=00a4f808 ebp=00a4f818 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
690795e5 ffb604040000    push    dword ptr [esi+404h] ds:002b:00a4fca0=00000000

Dans cet exemple, toutes les positions dans la trace où les quatre octets de mémoire à partir de 0x1bf7d0 ont été accédés en lecture/écriture sont listées. Cliquez sur n’importe quelle entrée pour approfondir chaque occurrence d’accès à la mémoire.

0:000> dx @$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
@$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")                
    [0x0]           
    [0x1]           
    [0x2]           
    [0x3]           
     ...

Dans cet exemple, toutes les positions dans la trace où les quatre octets de mémoire à partir de 0x13a1710 ont été accédés en exécution/changement sont listées. Cliquez sur n’importe quelle occurrence pour approfondir les informations supplémentaires sur chaque occurrence d’accès à la mémoire.

0:000> dx -r1 @$cursession.TTD.Memory(0x13a1710,0x13a1714, "ec")[0]
@$cursession.TTD.Memory(0x13a1710,0x13a1714, "ec")[0]                
    EventType        : MemoryAccess
    ThreadId         : 0x1278
    UniqueThreadId   : 0x2
    TimeStart        : 5B:4D [Time Travel]
    TimeEnd          : 5B:4D [Time Travel]
    AccessType       : Execute
    IP               : 0x13a1710
    Address          : 0x13a1710
    Size             : 0x1
    Value            : 0x55

Voir aussi

Débogage de voyage dans le temps - Introduction aux objets de débogage de voyage dans le temps

Débogage de voyage dans le temps - Vue d’ensemble