Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Описание
Память 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")
Вы можете щелкнуть поля 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
См. также
Отладка с путешествием во времени — введение в объекты этой отладки