TTD 内存对象

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

内存对象 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

另请参阅

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

时间旅行调试 - 概述