Acessando memória por endereço virtual
Para acessar endereços de memória ou intervalos de endereços, você pode usar vários comandos. O Visual Studio e o WinDbg fornecem elementos de interface do usuário (bem como comandos) que você pode usar para exibir e editar a 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 quad), inteiros (inteiros curtos, longos e quad e inteiros sem sinal), números de ponto flutuante (números de 10 bytes, 16 bytes, números reais de 32 bytes e 64 bytes) e caracteres ASCII.
O comando d* (Exibir Memória) exibe o conteúdo de um endereço ou intervalo de memória especificado.
O comando e* (Inserir Valores) 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 (Tipo de Exibição) localiza uma variedade de tipos de dados e exibe estruturas de dados que foram criadas pelo aplicativo que está sendo depurado. Esse comando é altamente versátil e tem muitas variações e opções.
O comando ds, dS (Cadeia de Caracteres de Exibição) 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 quad-words que podem conter informações de símbolo e exibe os dados e as informações do símbolo.
O comando !address extension exibe informações sobre as propriedades da memória localizadas 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 (Preencher Memória) grava um padrão em um intervalo de memória, repetindo-o até que o intervalo esteja cheio.
O comando c (Comparar Memória) compara o conteúdo de dois intervalos de memória.
O comando s (Pesquisar Memória) procura um padrão especificado dentro de um intervalo de memória ou procura por caracteres ASCII ou Unicode que existam em um intervalo de memória.
O comando .holdmem (Manter e Comparar Memória) 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 está no 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 inteiros e números reais no formato decimal e exibe outros formatos no formato hexadecimal.
Para alterar o radix padrão, use o comando n (Definir Base numérica ). 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 do modo de usuário, o significado dos endereços virtuais é determinado pelo processo atual. Quando você está executando a depuração do modo kernel, o significado dos endereços virtuais pode ser controlado pelo depurador. Para obter mais informações, consulte Contexto do processo.