次の方法で共有


TTD メモリ オブジェクト

説明

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

メモリ オブジェクト 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 - 概要