DESCRIPTION
TTD Memory 是一种采用 beginAddress、endAddress 和 dataAccessMask 参数的方法,并返回包含内存访问信息的内存对象的集合。
参数
| 资产 | DESCRIPTION |
|---|---|
| beginAddress | 以 0x 开头的内存对象的起始地址。 |
| endAddress (结束地址) | 以 0x 开头的内存对象的结束地址。 |
| 数据访问掩码 | 双引号中包含的数据访问掩码。 这可以是 r 进行读取、w 用于写入、e 用于执行和 c 进行更改。 |
孩子
| 物体 | DESCRIPTION |
|---|---|
| 事件类型 | 事件类型。 对于所有 TTD.Memory 对象,这是“MemoryAccess”。 |
| ThreadId | 发出请求的线程的 OS 线程 ID。 |
| UniqueThreadId | 跟踪中线程的唯一 ID。 常规线程 ID 可以在进程的生存期内重复使用,但 UniqueThreadIds 无法重复使用。 |
| TimeStart | 一个 位置对象 ,描述内存访问时的位置。 |
| 时间结束 | 一个 位置对象 ,描述内存访问时的位置。 这将始终与 TTD.Memory 对象的 TimeStart 相同。 |
| 访问类型 | 访问类型 - 读取、写入或执行。 |
| IP | 导致内存访问的代码的指令指针。 |
| 地址 | 读、写或执行的地址将在参数中位于 [beginAddress, endAddress) 范围内的 .Memory()。 请注意,间隔是半开的。 也就是说,返回的事件中没有与 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