Compartilhar via


Objetos de memória TTD

Descrição

A memória TTD é um método que usa 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
beginAddress O endereço inicial do objeto de memória precedido com 0x.
endereço final O endereço final do objeto de memória precedido com 0x.
dataAccessMask Máscara de acesso a dados contida em aspas duplas. Isso pode ser r para leitura, w para gravação, e para execução e c para alteração.

Crianças

Objeto Descrição
Tipo de Evento O tipo do evento. Este é "MemoryAccess" para todos os objetos de memória TTD.
ThreadId A ID do thread do sistema operacional do thread que fez a solicitação.
UniqueThreadId Uma ID exclusiva para o thread no rastreamento. As IDs de thread regulares podem ser reutilizadas durante o tempo de vida de um processo, mas UniqueThreadIds, não.
TimeStart Um objeto de posição que descreve a posição quando o acesso à memória foi feito.
TimeEnd Um objeto de posição que descreve a posição quando o acesso à memória foi feito. Isso sempre será o mesmo que o TimeStart para TTD.Memory objects.
Tipo de Acesso O tipo de acesso – Ler, Gravar 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/gravado em/executado e estará no intervalo de [beginAddress, endAddress) dos parâmetros para . Memory(). Observe que o intervalo é semiaberto. Ou seja, nenhum dos eventos retornados terá um endereço correspondente ao endAddress, mas pode haver eventos correspondentes a endAddress – 1.
Tamanho O tamanho da leitura/gravação/execução em bytes. Normalmente, serão 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, gravado 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 tipos de acesso a seguir são permitidos no TTD. Consultas de memória:

  • r - ler
  • w – gravar
  • rw – leitura/gravação
  • e – executar
  • rwe - leitura/gravação/execução
  • ec – executar /alterar

Observe que essa é uma função que faz a computação, portanto, leva um tempo para ser executada.

Exemplo de Uso

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

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

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

Você pode clicar nos campos TimeStart em qualquer um dos eventos na exibição da 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 em que os quatro bytes de memória começando em 0x1bf7d0 foram acessados por leitura/gravação estão listadas. Clique em qualquer entrada para aprofundar em 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 em que os quatro bytes de memória, começando em 0x13a1710, tiveram acesso de execução/modificação, são listadas. Clique em qualquer ocorrência para explorar informações adicionais sobre cada ocorrência de 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

Consulte Também

Depuração de viagem no tempo - Introdução à Depuração de objetos de viagem no tempo

Depuração de viagem no tempo – Visão geral