!db, !dc, !dd, !dp, !dq, !du, !dw
As extensões !db, !dc, !dd, !dp, !dq, !du e !dw exibem dados no endereço físico especificado no computador de destino.
Não confunda esses comandos de extensão com o comando d* (Memória de vídeo) ou com o comando de extensão !ntsdexts.dp.
!db [Caching] [-m] [PhysicalAddress] [L Size]
!dc [Caching] [-m] [PhysicalAddress] [L Size]
!dd [Caching] [-m] [PhysicalAddress] [L Size]
!dp [Caching] [-m] [PhysicalAddress] [L Size]
!dq [Caching] [-m] [PhysicalAddress] [L Size]
!du [Caching] [-m] [PhysicalAddress] [L Size]
!dw [Caching] [-m] [PhysicalAddress] [L Size]
Parâmetros
Cache
Pode ser um dos valores a seguir. O valor Caching deve estar entre colchetes:
[c]
Leva a uma leitura dessa extensão a partir da memória armazenada em cache.
[uc]
Leva a uma leitura dessa extensão a partir da memória não armazenada em cache.
[wc]
Leva a uma leitura dessa extensão a partir da memória com combinação de gravação.
-m
Leva a uma leitura da memória em uma unidade por vez. Por exemplo, !db -m lê a memória em blocos de 8 bits, enquanto !dw -m lê memória em blocos de 16 bits. Se o hardware não aceitar leituras de memória física de 32 bits, talvez seja necessário utilizar a opção -m. Essa opção não afeta o comprimento ou a aparência da tela. Ela só afeta a forma de acesso da memória.
Endereço Físico
Especifica o primeiro endereço físico a ser exibido, em formato hexadecimal. Se isso for omitido quando esse comando for usado pela primeira vez, o endereço usará zero como padrão. Se isso for omitido em um uso posterior, a exibição começará onde a última exibição terminou.
L **** Tamanho
Especifica o número de blocos de memória a serem exibidos. A extensão precisa utilizada determina o tamanho de um bloco.
Ambiente
Modo |
Modo kernel |
DLL
Kext.dll
Informações Adicionais
Para gravar na memória física, use as extensões !e\*. Para ter uma visão geral da manipulação de memória e uma descrição de outros comandos relativos à memória, confira Memória de leitura e de gravação.
Comentários
Todas essas extensões exibem memória física, mas há diferença nos formatos de exibição e comprimento padrão:
A extensão !db exibe bytes hexadecimais e os equivalentes de caracteres ASCII. O comprimento padrão é de 128 bytes.
A extensão !dc exibe valores DWORD e os equivalentes de caracteres ASCII. O comprimento padrão é 32 DWORDs (total de 128 bytes).
A extensão !dd exibe valores DWORD. O comprimento padrão é 32 DWORDs (total de 128 bytes).
A extensão !dp exibe valores ULONG_PTR. De acordo com o tamanho da instrução, as palavras têm 32 bits ou 64 bits. O comprimento total padrão é de 128 bytes.
A extensão !dq exibe valores ULONG64_PTR. Estas são palavras de 32 bits. O comprimento total padrão é de 128 bytes.
A extensão !du exibe caracteres UNICODE. O comprimento padrão é de 16 caracteres (total de 32 bytes) ou até localizar um caractere NULL.
A extensão !dw exibe valores WORD. O comprimento padrão é 64 DWORDs (total de 128 bytes).
Assim, o uso de duas dessas extensões diferentes com o mesmo valor de Size provavelmente resultará em uma distinção na quantidade total de memória exibida. Por exemplo, usar o comando !db L 32 resulta na exibição de 32 bytes (como bytes hexadecimais), enquanto o comando !dd L 32 resulta na exibição de 128 bytes (como valores DWORD).
Veja aqui um exemplo em que é necessário o sinalizador de atributo de cache:
kd> !dc e9000
physical memory read at e9000 failed
If you know the caching attributes used for the memory,
try specifying [c], [uc] or [wc], as in !dd [c] <params>.
WARNING: Incorrect use of these flags will cause unpredictable
processor corruption. This may immediately (or at any time in
the future until reboot) result in a system hang, incorrect data
being displayed or other strange crashes and corruption.
kd> !dc [c] e9000
# e9000 000ea002 000ea002 000ea002 000ea002 ................
# e9010 000ea002 000ea002 000ea002 000ea002 ................