Partager via


Objets mémoire TTD

Descriptif

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

Paramètres

Propriété Descriptif
beginAddress Adresse de début de l’objet mémoire précédé de 0x.
endAddress L’adresse de fin de l’objet mémoire précédée de 0x.
dataAccessMask Masque d’accès aux données contenu entre guillemets doubles. Il peut s’agir de r pour la lecture, w pour l’écriture, e pour l’exécution et c pour la modification.

Enfants

Objet Descriptif
Type d’événement le type d’événement ; Il s'agit de "MemoryAccess" pour tous les objets mémoire TTD.
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 Objet position qui décrit la position lors de l’accès à la mémoire.
Fin du Temps Objet 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 de mémoire TTD.
Type d'accès Type d’accès : lecture, écriture ou exécution.
Protocole Internet (IP) Le pointeur d'instruction du code qui a effectué l'accès à la mémoire.
Adresse L'adresse qui a été lue, écrite ou exécutée sera dans la plage de [beginAddress, endAddress) des paramètres de .Memory(). Notez que l’intervalle est demi-ouvert. Autrement dit, aucun des événements retournés n’aura une adresse correspondant à endAddress, mais il peut y avoir des événements correspondant à endAddress – 1.
Taille Taille de la lecture/écriture/exécution en octets. Il s’agit généralement de 8 octets ou moins. En cas d’exécution du code, il s’agit du nombre d’octets dans l’instruction exécutée.
Valeur Valeur qui a été lue, écrite ou exécutée. En cas d’exécution, il contient les octets de code pour l’instruction. Notez que les octets d’instruction sont répertoriés dans l’ordre MSB par le désassembleur, mais sont stockés sous forme LSB.

Remarques

Les types d’accès suivants sont autorisés dans TTD. Requêtes de mémoire :

  • r - lecture
  • w - écrire
  • rw - lecture/écriture
  • e - exécuter
  • rwe - lecture/ écriture / exécution
  • ec - exécuter /changer

Notez qu’il s’agit d’une fonction qui effectue le calcul. Il faut 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 commençant à 0x00a4fca0 ont fait l'objet d'un accès en lecture. Cliquez sur n’importe quelle entrée pour explorer chaque occurrence de l’accès à la mémoire.

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

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

Vous pouvez cliquer sur les champs TimeStart dans l’un des événements de la grille pour afficher des informations pour 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 accéder à la position dans la trace que l’événement s’est produit, cliquez sur [Voyage dans le temps].

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 de la trace où les quatre octets de mémoire commençant à 0x1bf7d0 ont été accessibles en lecture/écriture sont répertoriés. Cliquez sur n’importe quelle entrée pour explorer chaque occurrence de l’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 de la trace où les quatre octets de mémoire commençant à 0x13a1710 ont été exécutés/modifiés sont répertoriés. Cliquez sur n’importe quelle occurrence pour en savoir plus 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