Partilhar via


Acessando a memória por endereço virtual

Para acessar endereços de memória ou intervalos de endereços, você pode usar vários comandos. Visual Studio e WinDbg fornecem elementos de interface do usuário (bem como comandos) que você pode usar para exibir e editar memória. Para obter mais informações, consulte Exibindo e editando memória no WinDbg (clássico).

Os comandos a seguir podem ler ou gravar memória em uma variedade de formatos. Esses formatos incluem bytes hexadecimais, palavras (palavras, palavras duplas e palavras quádruplas), inteiros (inteiros curtos, longos e quádruplos e inteiros não assinados), números de vírgula flutuante (números reais de 10 bytes, 16 bytes, 32 bytes e 64 bytes) e caracteres ASCII.

  • O comando d* (Display Memory) exibe o conteúdo de um endereço ou intervalo de memória especificado.

  • O comando e* (Enter Values) grava um valor no endereço de memória especificado.

Você pode usar os seguintes comandos para lidar com tipos de dados mais especializados:

  • O comando dt (Display Type) localiza uma variedade de tipos de dados e exibe estruturas de dados que foram criadas pelo aplicativo que está sendo depurado. Este comando é altamente versátil e tem muitas variações e opções.

  • O comando ds, dS (Display String) exibe uma estrutura de dados STRING, ANSI_STRING ou UNICODE_STRING.

  • O comando dl (Exibir Lista Vinculada) rastreia e exibe uma lista vinculada.

  • O comando d*s (Exibir palavras e símbolos) localiza palavras duplas ou palavras quádruplas que podem conter informações de símbolo e, em seguida, exibe os dados e as informações do símbolo.

  • O comando !address extension exibe informações sobre as propriedades da memória localizada em um endereço específico.

Você pode usar os seguintes comandos para manipular intervalos de memória:

  • O comando m (Mover memória) move o conteúdo de um intervalo de memória para outro.

  • O comando f (Fill Memory) grava um padrão em um intervalo de memória, repetindo-o até que o intervalo esteja cheio.

  • O comando c (Compare Memory) compara o conteúdo de dois intervalos de memória.

  • O comando s (Search Memory) procura um padrão especificado dentro de um intervalo de memória ou procura quaisquer caracteres ASCII ou Unicode que existam em um intervalo de memória.

  • O comando .holdmem (Hold and Compare Memory) compara um intervalo de memória com outro.

Na maioria das situações, esses comandos interpretam seus parâmetros no radix atual. Portanto, você deve adicionar 0x antes de endereços hexadecimais se o radix atual não for 16. No entanto, a saída de exibição desses comandos é normalmente em formato hexadecimal, independentemente do radix atual. (Para obter mais informações sobre a saída, consulte os tópicos de comando individuais.) A janela Memória exibe números inteiros e reais em formato decimal e exibe outros formatos em formato hexadecimal.

Para alterar o radix padrão, use o comando n (set Number Base). Para converter rapidamente números de uma base para outra, use o ? (Avaliar Expressão) ou o comando .formats (Mostrar formatos de número ).

Quando você está executando a depuração no modo de usuário, o significado dos endereços virtuais é determinado pelo processo atual. Quando se está a executar a depuração no modo kernel, o significado dos endereços virtuais pode ser controlado pelo depurador. Para obter mais informações, consulte Contexto do processo.