Objetos de memoria TTD
Descripción
TTD Memory es un método que toma los parámetros beginAddress, endAddress y dataAccessMask y devuelve una colección de objetos de memoria que contienen información de acceso a la memoria.
Parámetros
Propiedad | Descripción |
---|---|
beginAddress | La dirección inicial del objeto de memoria precedida por 0x. |
endAddress | La dirección final del objeto de memoria precedida por 0x. |
dataAccessMask | La máscara de acceso a datos contenida entre comillas dobles. Esto puede ser r para leer, w para escribir, e para ejecutar y c para cambiar. |
Children
Object | Descripción |
---|---|
EventType | El tipo de evento. Esto es "MemoryAccess" para todos los objetos TTD.Memory. |
ThreadId | El ID del subproceso del sistema operativo del subproceso que realizó la solicitud. |
UniqueThreadId | Un identificador único para el subproceso en el seguimiento. Los identificadores de subprocesos normales se pueden reutilizar durante la duración de un proceso, pero UniqueThreadIds no. |
TimeStart | Un objeto de posición que describe la posición en la que se realizó el acceso a la memoria. |
TimeEnd | Un objeto de posición que describe la posición en la que se realizó el acceso a la memoria. Este siempre será el mismo que TimeStart para objetos TTD.Memory. |
AccessType | Tipo de acceso: lectura, escritura o ejecutar. |
IP | El puntero de instrucción del código que realizó el acceso a la memoria. |
Dirección | Dirección que se leyó, se escribió en o se ejecutó y estará en el intervalo de [beginAddress, endAddress) desde los parámetros hasta .Memory(). Tenga en cuenta que el intervalo está semiabierto. Es decir, ninguno de los eventos devueltos tendrá una dirección que coincida con endAddress, pero podría haber eventos que coincidan con endAddress – 1. |
Size | Tamaño de lectura, escritura y ejecución en bytes. Normalmente, será de 8 bytes o menos. En caso de ejecución de código, es el número de bytes de la instrucción que se ejecutó. |
Valor | Valor que se leyó, se escribió o se ejecutó. En el caso de ejecución, contiene los bytes de código de la instrucción. Tenga en cuenta que los bytes de instrucción se enumeran en orden MSB por el desensamblador, pero se almacenarán en el valor en orden LSB. |
Comentarios
Se permiten los siguientes tipos de acceso en las consultas TTD.Memory:
- r: lectura
- w: escritura
- rw: lectura y escritura
- e: ejecutar
- rwe: lectura, escritura y ejecución
- ec: ejecutar y cambiar
Tenga en cuenta que se trata de una función que realiza cálculos, por lo que tarda un poco en ejecutarse.
Uso de ejemplo
Este ejemplo muestra una visualización en cuadrícula de todas las posiciones en el seguimiento donde se produjo el acceso de lectura a los cuatro bytes de memoria que comienzan en 0x00a4fca0. Haga clic en cualquier entrada para obtener información detallada sobre cada incidencia de acceso a la memoria.
dx -g @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")
Puede hacer clic en los campos TimeStart en cualquiera de los eventos en la visualización de la cuadrícula para mostrar información de ese evento.
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
Para desplazarse a la posición del seguimiento en el que se produjo el evento, haga clic en [Viajes en el tiempo].
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
Este ejemplo muestra una visualización en cuadrícula de todas las posiciones en el seguimiento donde se produjo el acceso de lectura a los cuatro bytes de memoria que comienzan en 0x00a4fca0. Haga clic en cualquier entrada para obtener información detallada sobre cada incidencia de acceso a la memoria.
0:000> dx @$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
@$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
[0x0]
[0x1]
[0x2]
[0x3]
...
En este ejemplo se enumeran todas las posiciones en el seguimiento donde se accedió a la ejecución o modificación de los cuatro bytes de memoria a partir de 0x13a1710. Haga clic en cualquier entrada para obtener información detallada sobre cada incidencia de acceso a la memoria.
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
Consulte también
Depuración de viajes en el tiempo - Introducción a los objetos de depuración de viajes en el tiempo