Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Описание
Память 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
См. также
Отладка с путешествием во времени — введение в объекты этой отладки