説明
TTD Memory は、beginAddress、endAddress、dataAccessMask パラメーターを受け取り、メモリ アクセス情報を含むメモリ オブジェクトのコレクションを返すメソッドです。
パラメーター
プロパティ | 説明 |
---|---|
開始アドレス | 0x で始まるメモリ オブジェクトの開始アドレス。 |
エンドアドレス | 0x で始まるメモリ オブジェクトの終了アドレス。 |
データアクセスマスク | データアクセスマスクは二重引用符に含まれる。 これは、読み取りの場合は r、書き込みの場合は w、実行の場合は e、変更の場合は c にすることができます。 |
子供
オブジェクト | 説明 |
---|---|
イベントの種類 | イベントのタイプ。 すべての TTD.Memory オブジェクトに対する "MemoryAccess" です。 |
ThreadId | 要求を行ったスレッドの OS スレッド ID。 |
UniqueThreadId | トレースでのスレッドの一意の ID。 通常のスレッド ID はプロセスの有効期間中に再利用できますが、UniqueThreadIds は再利用できません。 |
開始時刻 | メモリ アクセスが行われた位置を表す 位置オブジェクト 。 |
終了時間 | メモリ アクセスが行われた位置を表す 位置オブジェクト 。 これは常に TTD の TimeStart と同じです。メモリ オブジェクト。 |
アクセスの種類 | アクセスの種類 - 読み取り、書き込み、または実行。 |
IP | メモリ アクセスを行ったコードの命令ポインター。 |
住所 | アドレスは読み取り、書き込み、または実行され、パラメーターから [beginAddress, endAddress) の範囲内にあり、それがメモリ内です。 間隔は半開きであることに注意してください。 つまり、返されるイベントのいずれも endAddress と一致するアドレスはありませんが、endAddress - 1 と一致するイベントが存在する可能性があります。 |
サイズ | 読み取り/書き込み/実行のサイズ (バイト単位)。 通常、これは 8 バイト以下になります。 コードが実行された場合、実行された命令のバイト数です。 |
価値 | 読み取り、書き込み、または実行された値。 実行の場合は、命令のコード バイトが含まれます。 命令バイトは逆アセンブラーによって MSB 順に一覧表示されますが、LSB 順の値で格納されることに注意してください。 |
注釈
TTD では、次のアクセスの種類が許可されます。メモリ クエリ:
- r - 読む
- w - 書き込み
- rw - 読み取り/書き込み
- e - 実行
- rwe - 読み取り/書き込み/実行
- ec - "/change" を実行する
これは計算を行う関数であるため、実行に時間がかかることに注意してください。
使用例
この例では、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