TTD 記憶體物件
描述
TTD Memory 是接受 beginAddress、endAddress 和 dataAccessMask 參數的方法,並傳回包含記憶體存取資訊的記憶體物件集合。
參數
屬性 | 說明 |
---|---|
beginAddress | 開頭為 0x 的記憶體物件開頭位址。 |
endAddress | 開頭為 0x 的記憶體物件結束位址。 |
dataAccessMask | 雙引號中包含的數據存取遮罩。 這可以是 r 來讀取、w 用於寫入、e 代表 execute 和 c 進行變更。 |
Children
Object | 描述 |
---|---|
EventType | 事件的類型。 這是所有 TTD 的 「MemoryAccess」。記憶體物件。 |
ThreadId | 發出要求的線程OS線程標識碼。 |
UniqueThreadId | 追蹤中線程的唯一標識碼。 一般線程標識碼可以在進程存留期內重複使用,但 UniqueThreadIds 無法重複使用。 |
TimeStart | 位置物件,描述進行記憶體存取時的位置。 |
TimeEnd | 位置物件,描述進行記憶體存取時的位置。 這一律會與 TTD 的 TimeStart 相同。記憶體物件。 |
AccessType | 存取類型 - 讀取、寫入或執行。 |
IP | 進行記憶體存取之程式代碼的指令指標。 |
位址 | 已讀取/寫入/執行位址,且會位於參數到 的 [beginAddress, endAddress] 範圍中。Memory()。 請注意,間隔為半開啟。 也就是說,傳回的事件都不會有位址比對 endAddress,但可能有符合 endAddress – 1 的事件。 |
大小 | 讀取/寫入/執行的大小,以位元組為單位。 這通常為8個字節或更少。 在程式代碼執行時,它是所執行指令中的位元元組數目。 |
值 | 已讀取、寫入或執行的值。 在執行時,它會包含指令的程式代碼位元組。 請注意,指令位元組會依反組譯器以 MSB 順序,但會以 LSB 順序儲存在值中。 |
備註
TTD 中允許下列存取類型。記憶體查詢:
- r - read
- w - 寫入
- rw - 讀取/寫入
- e - 執行
- rwe - 讀取/寫入/執行
- ec - 執行 /change
請注意,這是執行計算的函式,因此需要一段時間才能執行。
使用範例
此範例顯示追蹤中所有位置的方格顯示,其中從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