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

内存对象 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 开始的四个字节的内存被读/写访问的所有位置。 点击任一条目,深入了解每次内存访问的情况。

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

另请参阅

时间旅行调试 - 时间旅行调试对象简介

时间旅行调试 - 概述