Memória virtual e física
O mecanismo fornece vários métodos para ler e gravar a memória virtual e física de um destino.
Memória Virtual
Ao especificar um local na memória virtual de um destino, o espaço de endereço virtual do destino é usado. Na depuração do modo de usuário, esse é o espaço de endereço virtual do processo atual. Na depuração do modo kernel, esse é o espaço de endereço virtual do processo implícito. Consulte Threads e Processos para obter mais informações sobre o processo atual e implícito.
A memória virtual (do destino) pode ser lida usando ReadVirtual e gravada usando WriteVirtual.
Ponteiros na memória do destino podem ser lidos e gravados usando os métodos de conveniência ReadPointersVirtual e WritePointersVirtual. Esses métodos serão convertidos automaticamente entre os ponteiros de 64 bits usados pelo mecanismo e os ponteiros nativos usados pelo destino. Esses métodos são úteis ao solicitar memória que contém ponteiros que serão usados para solicitações subsequentes, por exemplo, um ponteiro para uma cadeia de caracteres.
Os métodos SearchVirtual e SearchVirtual2 podem ser usados para pesquisar na memória virtual do destino um padrão de bytes.
O método FillVirtual pode ser usado para copiar um padrão de bytes, várias vezes, para a memória virtual do destino.
A memória virtual do destino também pode ser lida e gravada de uma forma que ignore o cache de memória virtual do mecanismo de depurador usando os métodos ReadVirtualUncached e WriteVirtualUncached. Essas versões não armazenadas em cache são úteis para ler memória virtual inerentemente volátil, como áreas de dispositivo mapeadas em memória, sem contaminar ou invalidar o cache. O acesso à memória não armazenado em cache só deve ser usado em situações em que é necessário, pois o desempenho do acesso não armazenado em cache pode ser significativamente menor do que o acesso armazenado em cache.
O mecanismo fornece alguns métodos de conveniência para ler cadeias de caracteres da memória virtual do destino. Para ler uma cadeia de caracteres multibyte do destino, use ReadMultiByteStringVirtual e ReadMultiByteStringVirtualWide. Para ler uma cadeia de caracteres Unicode do destino, use ReadUnicodeStringVirtual e ReadUnicodeStringVirtualWide.
Para encontrar informações sobre um local de memória, use GetOffsetInformation. Nem todo o espaço de endereço virtual no destino contém memória válida. Para localizar a memória válida em uma região, use GetValidRegionVirtual. Ao pesquisar manualmente a memória válida em um destino, o método GetNextDifferentlyValidOffsetVirtual encontrará o próximo local em que a validade pode ser alterada.
Memória física
A memória física só pode ser acessada diretamente na depuração do modo kernel.
A memória física no destino pode ser lida usando ReadPhysical e ReadPhysical2 e escrita usando WritePhysical e WritePhysical2.
O método FillPhysical pode ser usado para copiar um padrão de bytes, várias vezes, para a memória física do destino.
Um endereço no espaço de endereço virtual do destino pode ser convertido em um endereço físico no destino usando o método VirtualToPhysical . As estruturas de paginação do sistema usadas para converter um endereço virtual em um endereço físico podem ser encontradas usando GetVirtualTranslationPhysicalOffsets.
Eventos
Quando a memória virtual ou física do destino é alterada, o método de retorno de chamada IDebugEventCallbacks::ChangeDebuggeeState é chamado.