Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
BESCHREIBUNG
TTD Memory ist eine Methode, die parameter "beginAddress", "endAddress" und "dataAccessMask" verwendet und eine Sammlung von Speicherobjekten zurückgibt, die Speicherzugriffsinformationen enthalten.
Die Parameter
| Eigentum | BESCHREIBUNG |
|---|---|
| Startadresse | Die Anfangsadresse des Speicherobjektspeichers, eingeleitet mit 0x. |
| endAdresse | Die Endadresse des Speicherobjekts, der mit "0x" vorangestellt ist. |
| DatenZugriffsMaske | Die Datenzugriffsmaske ist in doppelten Anführungszeichen enthalten. Dies kann r für Lesen, w für Schreiben, e für Ausführen und c für Ändern sein. |
Kinder
| Objekt | BESCHREIBUNG |
|---|---|
| Eventtyp | Den Typ des Ereignisses Dies ist "MemoryAccess" für alle TTD.Memory-Objekte. |
| ThreadId | Die Betriebssystemthread-ID des Threads, der die Anforderung gestellt hat. |
| UniqueThreadId | Eine eindeutige ID für den Thread über die Ablaufverfolgung hinweg. Reguläre Thread-IDs können während der Lebensdauer eines Prozesses wiederverwendet werden, uniqueThreadIds können jedoch nicht verwendet werden. |
| TimeStart | Ein Positionsobjekt , das die Position beschreibt, an der der Speicherzugriff vorgenommen wurde. |
| Zeitende | Ein Positionsobjekt , das die Position beschreibt, an der der Speicherzugriff vorgenommen wurde. Dies wird immer dasselbe wie der TimeStart für TTD.Memory-Objekte sein. |
| Zugriffstyp | Der Zugriffstyp - Lese-, Schreib- oder Ausführungstyp. |
| IP-Adresse | Der Anweisungszeiger des Codes, der den Speicherzugriff vorgenommen hat. |
| Adresse | Die Adresse, die gelesen, beschrieben oder ausgeführt wurde, befindet sich im Bereich [beginAddress, endAddress) der Parameter in .Memory(). Beachten Sie, dass das Intervall halb geöffnet ist. Das heißt, keines der zurückgegebenen Ereignisse verfügt über eine Adresse mit endAddress, aber es können Ereignisse vorhanden sein, die endAddress – 1 entsprechen. |
| Größe | Die Größe des Lese-/Schreib-/Ausführungsvorgangs in Bytes. Dies beträgt in der Regel 8 Byte oder weniger. Im Falle der Codeausführung ist dies die Anzahl der Bytes in der Anweisung, die ausgeführt wurde. |
| Wert | Der Wert, der gelesen, geschrieben oder ausgeführt wurde. Im Fall der Ausführung enthält sie die Codebytes für die Anweisung. Beachten Sie, dass die Anweisungsbytes vom Disassembler in MSB-Reihenfolge aufgeführt werden, jedoch als Wert in LSB-Reihenfolge gespeichert werden. |
Bemerkungen
Die folgenden Zugriffstypen sind in TTD zulässig. Speicherabfragen:
- r - lesen
- w - schreiben
- rw - Lese-/Schreibzugriff
- e - ausführen
- rwe - lese-/schreib-/ausführen
- ec - ausführen /ändern
Beachten Sie, dass dies eine Funktion ist, die Berechnungen durchführt, daher dauert es eine Weile, bis sie ausgeführt wird.
Anwendungsbeispiel
Dieses Beispiel zeigt eine Rasteranzeige aller Positionen in der Ablaufverfolgung, an denen die vier Bytes des Arbeitsspeichers beginnend bei 0x00a4fca0 gelesen wurden. Klicken Sie auf einen beliebigen Eintrag, um einen Drilldown für jedes Vorkommen des Speicherzugriffs anzuzeigen.
dx -g @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")
Sie können auf die Felder "TimeStart" in einem der Ereignisse in der Rasteranzeige klicken, um Informationen für dieses Ereignis anzuzeigen.
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
** Um zu der Position in der Ablaufverfolgung zu wechseln, an der das Ereignis aufgetreten ist, klicken Sie auf [Zeitreise].
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
In diesem Beispiel werden alle Positionen in der Ablaufverfolgung aufgelistet, an denen auf die vier Bytes des Arbeitsspeichers ab 0x1bf7d0 Lese-/Schreibzugriffe ausgeführt wurden. Klicken Sie auf einen beliebigen Eintrag, um einen Drilldown für jedes Vorkommen des Speicherzugriffs anzuzeigen.
0:000> dx @$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
@$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
[0x0]
[0x1]
[0x2]
[0x3]
...
In diesem Beispiel werden alle Positionen in der Ablaufverfolgung aufgelistet, an denen die vier Bytes des Arbeitsspeichers ab 0x13a1710 ausgeführt/geändert wurden. Klicken Sie auf ein beliebiges Vorkommen, um detaillierte Informationen zu jedem Vorkommen des Arbeitsspeicherzugriffs zu erhalten.
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
Siehe auch
Debuggen von Zeitreisen – Einführung in Objekte zum Debuggen von Zeitreisen