Freigeben über


TTD-Speicherobjekte

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

Screenshot der Dx-Beispielrasterausgabe des Speicherobjekts.

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

Zeitreise-Debugging – Überblick