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")
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