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")
グリッド表示内の任意のイベントの 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