TTD-Speicherobjekte
Beschreibung
TTD Memory ist eine Methode, die die Parameter beginAddress, endAddress und dataAccessMask verwendet und eine Auflistung von Speicherobjekten zurückgibt, die Speicherzugriffsinformationen enthalten.
Parameter
Eigenschaft | Beschreibung |
---|---|
beginAddress | Die Anfangsadresse des Speicherobjekts mit dem Präfix 0x. |
endAddress | Die Endadresse des Speicherobjekts mit dem Präfix 0x. |
dataAccessMask | Die Datenzugriffsmaske, die in doppelten Anführungszeichen enthalten ist. Dies kann r für Lesen, W für Schreiben, e für Ausführung und c für Änderungen sein. |
Children
Object | Beschreibung |
---|---|
EventType | Den Typ des Ereignisses Dies repräsentiert „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. |
TimeEnd | Ein Positionsobjekt, das die Position beschreibt, an der der Speicherzugriff vorgenommen wurde. Dies entspricht immer dem TimeStart für TTD.Memory-Objekte. |
AccessType | Der Zugriffstyp – Lesen, Schreiben oder Ausführen. |
IP | Der Befehlszeiger des Codes, der den Speicherzugriff vorgenommen hat. |
Adresse | Die Adresse, die gelesen/in die geschrieben/die ausgeführt wurde und im Bereich [beginAddress, endAddress) zwischen den Parametern und .Memory() liegt. Beachten Sie, dass das Intervall halb geöffnet ist. Das heißt, keines der zurückgegebenen Ereignisse verfügt über eine Adresse, die endAddress entspricht, aber es können Ereignisse vorhanden sein, die endAddress – 1 entsprechen. |
Size | Die Größe von Lesen/Schreiben/Ausführen in Bytes. Dies beträgt in der Regel 8 Byte oder weniger. Im Falle einer 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 einer Ausführung enthält dies die Codebytes für die Anweisung. Beachten Sie, dass die Anweisungsbytes vom Disassembler in MSB-Reihenfolge aufgeführt werden, werden aber in LSB-Reihenfolge im Wert gespeichert. |
Hinweise
Die folgenden Zugriffstypen sind in TTD.Memory-Abfragen zulässig:
- r – read (Lesen)
- w – write (Schreiben)
- rw – read / write (Lesen, Schreiben)
- e – execute (Ausführen)
- ec – read / write / execute (Lesen, Schreiben, Ausführen)
- ec – execute / change (Ausführen, Ändern)
Beachten Sie, dass es sich um eine Funktion handelt, die Berechnungen durchführt und daher eine gewisse Zeit in Anspruch nimmt.
Verwendungsbeispiel
Dieses Beispiel zeigt eine Rasteranzeige aller Positionen in der Ablaufverfolgung, an der die vier Bytes des Arbeitsspeichers, beginnend ab 0x00a4fca0, „Lesezugriff aufgetreten“ anzeigen. Klicken Sie auf einen beliebigen Eintrag, um einen Drilldown für jedes Vorkommen von Speicherzugriff anzuzeigen.
dx -g @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")
Sie können auf die TimeStart-Felder 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 Aufzeichnung zu gelangen, an der das Ereignis eingetreten 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 die vier Bytes des Arbeitsspeichers, beginnend ab 0x1bf7d0, „Lese-/Schreibzugriff“ anzeigen. Klicken Sie auf einen beliebigen Eintrag, um einen Drilldown für jedes Vorkommen von Speicherzugriff 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, beginnend ab 0x13a1710, „Zugriff für Ausführen/Ändern“ anzeigen. Klicken Sie auf ein beliebiges Vorkommen, um einen Drilldown für weitere Informationen zu jedem Vorkommen von Speicherzugriff anzuzeigen.
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
Weitere Informationen
Debuggen von Zeitreisen – Einführung in Objekte zum Debuggen von Zeitreisen