TTD 内存对象
说明
TTD Memory 是一种采用 beginAddress、endAddress 和 dataAccessMask 参数的方法,并返回包含内存访问信息的内存对象集合。
参数
properties | 说明 |
---|---|
beginAddress | 以 0x 开头的内存对象的起始地址。 |
endAddress | 以 0x 开头的内存对象的结束地址。 |
dataAccessMask | 双引号中包含的数据访问掩码。 这可以是 r 表示读取,w 表示写入,e 表示执行,c 表示更改。 |
Children
Object | 说明 |
---|---|
EventType | 事件类型。 这是所有 TTD.Memory 对象的“内存访问”。 |
ThreadId | 发出请求的线程的 OS 线程 ID。 |
UniqueThreadId | 跟踪中线程的唯一 ID。 常规线程 ID 可以在进程的生存期内重复使用,但 UniqueThreadIds 无法重复使用。 |
TimeStart | 一个位置对象,描述进行内存访问时的位置。 |
TimeEnd | 一个位置对象,描述进行内存访问时的位置。 这始终与 TTD.Memory 对象的 TimeStart 相同。 |
AccessType | 访问类型 - 读取、写入或执行。 |
IP | 进行内存访问的代码的指令指针。 |
Address | 被读/写/执行的地址,从参数到 .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