TTD メモリ オブジェクト

説明

TTD メモリは、beginAddress、endAddress、dataAccessMask の各パラメーターを受け取り、メモリ アクセス情報が含まれているメモリ オブジェクトのコレクションを返すメソッドです。

パラメーター

プロパティ 説明
beginAddress 0x で始まるメモリ オブジェクトの開始アドレス。
endAddress 0x で始まるメモリ オブジェクトの終了アドレス。
dataAccessMask 二重引用符で囲まれたデータ アクセス マスク。 これは、読み取りの場合は r、書き込みの場合は w、実行の場合は e、変更の場合は c になります。

Object 説明
EventType イベントのタイプ。 これは、すべての TTD.Memory オブジェクトで "MemoryAccess" です。
ThreadId 要求を行ったスレッドの OS スレッド ID。
UniqueThreadId トレースでのスレッドの一意の ID。 通常のスレッド ID はプロセスの有効期間中に再利用できますが、UniqueThreadIds は再利用できません。
TimeStart メモリ アクセスが行われた位置を表す位置オブジェクト
TimeEnd メモリ アクセスが行われた位置を表す位置オブジェクト。 これは常に TTD.Memory オブジェクトの TimeStart と同じになります。
AccessType アクセスの種類 - 読み取り、書き込み、または実行。
IP メモリ アクセスを実行したコードの命令ポインター。
番地 読み取り/書き込み/実行されたアドレスで、パラメーターから .Memory() への [beginAddress, endAddress) の範囲内になるアドレス。 間隔はハーフオープンであることに注意してください。 つまり、返されるイベントのいずれも endAddress と一致するアドレスを持ちませんが、endAddress – 1 と一致するイベントは存在する可能性があります。
サイズ 読み取り/書き込み/実行のサイズ (バイト単位)。 これは通常 8 バイト以下になります。 コードが実行された場合は、実行された命令のバイト数です。
Value 読み取り、書き込み、または実行された値。 実行の場合、これには命令のコード バイトが含まれています。 命令のバイトは逆アセンブラーによって MSB 順で一覧表示されますが、LSB 順で値に格納されることに注意してください。

解説

TTD.Memory クエリでは、次のアクセスの種類が許可されます。

  • r - 読み取り
  • w - 書き込み
  • rw - 読み取り/書き込み
  • e - 実行
  • rwe - 読み取り/書き込み/実行
  • ec - 実行/変更

これは評価を行う関数であるため実行に時間がかかることに注意してください。

使用例

この例では、0x00a4fca0 で始まる 4 バイトのメモリに対する読み取りアクセスが発生したトレース内のすべての位置のグリッド表示を示します。 任意のエントリをクリックして、発生した各メモリ アクセスについてドリルダウンします。

dx -g @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")

メモリ オブジェクト DX のグリッド出力例のスクリーンショット。

グリッド表示内の任意のイベントの TimeStart フィールドをクリックして、そのイベントの情報を表示できます。

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

イベントが発生したトレース内の位置に移動するには、[タイム トラベル] をクリックします。

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

この例では、0x1bf7d0 で始まる 4 バイトのメモリが読み取り/書き込みアクセスされたトレース内のすべての位置が一覧表示されます。 任意のエントリをクリックして、発生した各メモリ アクセスについてドリルダウンします。

0:000> dx @$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
@$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")                
    [0x0]           
    [0x1]           
    [0x2]           
    [0x3]           
     ...

この例では、0x13a1710 で始まる 4 バイトのメモリが実行/変更アクセスされたトレース内のすべての位置が一覧表示されます。 任意の発生をクリックしてドリル ダウンし、発生した各メモリ アクセスについての追加情報を確認します。

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

参照

Time Travel Debugging - Time Travel Debugging オブジェクトの概要

Time Travel Debugging - 概要