說明
TTD Memory 是一個採用 beginAddress、endAddress 和 dataAccessMask 參數的方法,並以帶回包含記憶體存取資訊的記憶體物件集合。
參數
| 房產 | 說明 |
|---|---|
| 開始位址 | 記憶體物件的開頭位址以 0x 開頭。 |
| endAddress (結束位址) | 記憶體物件的結束位址,前面是 0x。 |
| dataAccessMask | 資料存取遮罩包含在雙引號中。 這可以是 r 代表讀取,w 代表寫入,e 代表執行,c 代表變更。 |
孩子
| 物體 | 說明 |
|---|---|
| 事件類型 | 事件的類型。 這是所有 TTD.Memory 物件的「MemoryAccess」。 |
| ThreadId | 發出要求的線程OS線程標識碼。 |
| UniqueThreadId | 追蹤中線程的唯一標識碼。 一般線程標識碼可以在進程存留期內重複使用,但 UniqueThreadIds 無法重複使用。 |
| TimeStart | 描述在記憶體存取時的位置物件。 |
| TimeEnd | 用於描述記憶體存取時的位置物件。 這將始終與 TTD.Memory 物件的 TimeStart 相同。 |
| 存取類型 | 存取類型 - 讀取、寫入或執行。 |
| IP | 進行記憶體存取的程式碼的指令指標。 |
| 位址 | 讀取/寫入/執行的位址將位於由參數傳遞至.Memory()的[beginAddress, endAddress)範圍內。 請注意,這個區間是半開放區間。 也就是說,傳回的事件都不會有符合 endAddress 的位址,但可能有符合 endAddress – 1 的事件。 |
| 大小 | 讀取/寫入/執行的大小,以位元組為單位。 這通常是 8 個位元組或更少。 在執行程式碼的情況下,它是執行指令中的位元組數。 |
| 價值觀 | 讀取、寫入或執行的值。 在執行的情況下,它包含指令的代碼位元組。 請注意,指令位元組會由反組譯程式以 MSB 順序列出,但會以 LSB 順序儲存在值中。 |
備註
在 TTD.Memory 查詢中允許下列存取類型:
- r - 讀取
- w - 寫入
- rw - 讀取/寫入
- e - 執行
- RWE - 讀取/寫入/執行
- ec - 執行 /變更
請注意,這是執行計算的函式,因此需要一段時間才能執行。
範例使用方式
此範例顯示一個網格,其中顯示了追蹤中的所有位置,這些位置是從0x00a4fca0開始的四個位元組記憶體被讀取存取的地方。 按一下任何項目,以深入探索每次記憶體存取的出現。
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 開始的四個位元組記憶體的所有位置。 按一下任何項目,以進一步查看每次出現的記憶體存取。
0:000> dx @$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
@$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
[0x0]
[0x1]
[0x2]
[0x3]
...
在此範例中,會列出從 0x13a1710 開始的四個位元組記憶體在追蹤中被執行或變更存取的所有位置。 按一下任何記憶體存取事件,深入探索每次事件的其他資訊。
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