Partilhar via


Objetos de memória TTD

Descrição

TTD Memory é um método que usa os parâmetros beginAddress, endAddress e dataAccessMask e retorna uma coleção de objetos de memória que contêm informações de acesso à memória.

Parâmetros

Propriedade Descrição
beginEndereço: O endereço inicial do objeto de memória precedido de 0x.
Endereço final O endereço final do objeto de memória precedido de 0x.
dataAccessMask A máscara de acesso a dados contida entre aspas duplas. Isso pode ser r para leitura, w para gravação, e para executar e c para mudança.

Children

Objeto Descrição
Tipo de Evento O tipo de evento. Este é "MemoryAccess" para todos os objetos de TTD.Memory.
ThreadId O ID de thread do sistema operacional do thread que fez a solicitação.
UniqueThreadId Um ID exclusivo para o thread através do rastreamento. IDs de thread regulares podem ser reutilizados ao longo da vida útil de um processo, mas UniqueThreadIds não.
HoraDeInício Um objeto position que descreve a posição quando o acesso à memória foi feito.
TempoTerminado Um objeto position que descreve a posição quando o acesso à memória foi feito. Isso sempre será o mesmo que o TimeStart para objetos de memória TTD.
Tipo de Acesso O tipo de acesso - Ler, Escrever ou Executar.
IP O ponteiro de instrução do código que fez o acesso à memória.
Endereço O endereço que foi lido / escrito / executado e estará no intervalo de [beginAddress, endAddress) dos parâmetros para a função .Memory(). Note que o intervalo está semiaberto. Ou seja, nenhum dos eventos retornados terá um endereço correspondente a endAddress, mas pode haver eventos correspondentes a endAddress – 1.
Tamanho O tamanho da leitura/gravação/execução em bytes. Isso normalmente será de 8 bytes ou menos. No caso de execução de código, é o número de bytes na instrução que foi executada.
Valor O valor que foi lido, escrito ou processado. No caso de execução, ele contém os bytes de código para a instrução. Observe que os bytes de instrução são listados na ordem MSB pelo desmontador, mas serão armazenados em valor na ordem LSB.

Observações

Os seguintes tipos de acesso são permitidos em consultas de memória TTD:

  • r - ler
  • w - escrever
  • RW - Leitura/Escrita
  • e - executar
  • RWE - Ler / Escrever / Executar
  • ec - Executar/Alterar

Note que esta é uma função que faz computação, por isso demora algum tempo a executar.

Exemplo de Utilização

Este exemplo mostra uma exibição em grade de todas as posições no rastreamento onde ocorreram acessos de leitura aos quatro bytes de memória começando em 0x00a4fca0. Clique em qualquer entrada para detalhar cada ocorrência de acesso à memória.

dx -g @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")

Captura de ecrã da saída de exemplo de grade do objeto de memória dx.

Você pode clicar nos campos TimeStart em qualquer um dos eventos na exibição de grade, para exibir informações para esse 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 ir para a posição no rastreamento em que o evento ocorreu, clique em [Viagem no tempo].

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

Neste exemplo, todas as posições no rastreamento onde os quatro bytes de memória a partir de 0x1bf7d0 foram acessados são listados. Clique em qualquer entrada para detalhar cada ocorrência de acesso à memória.

0:000> dx @$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
@$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")                
    [0x0]           
    [0x1]           
    [0x2]           
    [0x3]           
     ...

Neste exemplo, todas as posições no rastreamento onde os quatro bytes de memória a partir de 0x13a1710 foram acedidos para execução ou modificação são listadas. Clique em qualquer ocorrência para obter informações detalhadas sobre cada acesso à memória.

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

Ver também

Depuração Temporal - Introdução aos Objetos de Depuração Temporal

Depuração de Time Travel - Visão Geral