Freigeben über


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

Screenshot des Speicherobjekts dx-Beispielrasterausgabe.

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

Zeitreise-Debugging – Überblick