Поделиться через


Объекты памяти TTD

Описание

Память TTD — это метод, который принимает параметры beginAddress, endAddress и dataAccessMask и возвращает коллекцию объектов памяти, содержащих сведения о доступе к памяти.

Параметры

Свойство Описание
beginAddress Начальный адрес объекта памяти с предваряется 0x.
endAddress Конечный адрес объекта памяти с предваряется 0x.
dataAccessMask Маска доступа к данным, содержащаяся в двойных кавычках. Это может быть r для чтения, w для записи, e для выполнения и c для изменения.

Дети

Объект Описание
EventType Тип события. Это "MemoryAccess" для всех TTD. Объекты памяти.
ThreadId Идентификатор потока ОС для потока, который сделал запрос.
UniqueThreadId Уникальный идентификатор потока в трассировке. Идентификаторы обычных потоков могут повторно использоваться в течение всего времени существования процесса, но UniqueThreadIds — нет.
TimeStart Объект position, описывающий позицию, когда был сделан доступ к памяти.
TimeEnd Объект position, описывающий позицию, когда был сделан доступ к памяти. Это всегда будет то же самое, что и timeStart для TTD. Объекты памяти.
AccessType Тип доступа — чтение, запись или выполнение.
IP-адрес Указатель инструкции кода, который сделал доступ к памяти.
Адрес Адрес, который был прочитан, записан в / выполнен и будет находиться в диапазоне [beginAddress, endAddress) от параметров до . Memory(). Обратите внимание, что интервал является полуоткрытым. То есть ни одно из возвращаемых событий не будет иметь адрес, соответствующий endAddress, но могут быть события, соответствующие endAddress – 1.
Размер Размер операции чтения, записи и выполнения в байтах. Обычно это значение не превышает 8 байт. В случае выполнения кода это количество байтов в выполненной инструкции.
Значение Значение, которое было прочитано, записано или выполнено. В случае выполнения он содержит байты кода для инструкции. Обратите внимание, что байты инструкций перечислены дизассемблером в порядке MSB, но будут храниться в значении в порядке LSB.

Комментарии

В TTD разрешены следующие типы доступа. Запросы памяти:

  • r — чтение
  • w — запись
  • rw — чтение и запись
  • e - execute
  • rwe — чтение, запись и выполнение
  • ec — execute /change

Обратите внимание, что эта функция выполняет вычисления, поэтому выполнение этой функции занимает некоторое время.

Example Usage (Пример использования)

В этом примере показана сетка, отображаемая все позиции в трассировке, где были доступны четыре байта памяти, начиная с 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

См. также:

Отладка перемещения по времени — общие сведения об объектах отладки перемещения по времени

Отладка перемещения по времени — обзор