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


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

Описание

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

Параметры

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

Дети

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

Замечания

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

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

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

Пример использования

В этом примере показана сетка всех позиций в трассировке, где произошел доступ на чтение к четырем байтам памяти, начиная с адреса 0x00а4fca0. Щелкните любую запись, чтобы провести подробный анализ каждого случая доступа к памяти.

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

Чтобы перейти к позиции в трассировке, в которой произошло событие, щелкните [Time Travel].

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

См. также

Отладка с путешествием во времени — введение в объекты этой отладки

Отладка временных путешествий — обзор