Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El motor proporciona una serie de métodos para leer y escribir la memoria virtual y física de un destino.
Memoria virtual
Al especificar una ubicación en la memoria virtual de un destino, se usa el espacio de direcciones virtuales del destino. En la depuración en modo usuario, este es el espacio de direcciones virtual del proceso actual. En la depuración en modo kernel, este es el espacio de direcciones virtuales del proceso implícito. Consulte Hilos y procesos para obtener más información sobre el proceso actual e implícito.
La memoria virtual (del destino) se puede leer mediante ReadVirtual y escribirse mediante WriteVirtual.
Los punteros de la memoria del destino se pueden leer y escribir mediante los métodos de conveniencia ReadPointersVirtual y WritePointersVirtual. Estos métodos convertirán automáticamente entre los punteros de 64 bits utilizados por el motor y los punteros nativos usados por el destino. Estos métodos son útiles al solicitar memoria que contiene punteros que se usarán para las solicitudes posteriores, por ejemplo, un puntero a una cadena.
Los métodos SearchVirtual y SearchVirtual2 se pueden usar para buscar en la memoria virtual del destino un patrón de bytes.
El método FillVirtual se puede usar para copiar un patrón de bytes, varias veces, en la memoria virtual del destino.
La memoria virtual del objetivo también se puede leer y escribir de manera que omita la memoria caché de la memoria virtual del motor del depurador, utilizando los métodos ReadVirtualUncached y WriteVirtualUncached. Estas versiones sin almacenar en caché son útiles para leer la memoria virtual que es inherentemente volátil, como áreas de dispositivo asignadas a memoria, sin contaminar ni invalidar la memoria caché. El acceso a memoria sin almacenar en caché solo debe usarse en situaciones en las que se requiera, ya que el rendimiento del acceso sin almacenamiento en caché puede ser significativamente menor que el acceso almacenado en caché.
El motor proporciona algunos métodos útiles para leer cadenas de la memoria virtual del destino. Para leer una cadena multibyte del destino, use ReadMultiByteStringVirtual y ReadMultiByteStringVirtualWide. Para leer una cadena Unicode del destino, use ReadUnicodeStringVirtual y ReadUnicodeStringVirtualWide.
Para buscar información sobre una ubicación de memoria, use GetOffsetInformation. No todo el espacio de direcciones virtuales del destino contiene memoria válida. Para buscar memoria válida dentro de una región, use GetValidRegionVirtual. Al buscar manualmente memoria válida en un destino, el método GetNextDifferentlyValidOffsetVirtual encontrará la siguiente ubicación donde puede cambiar la validez.
Memoria física
Solo se puede acceder directamente a la memoria física durante la depuración en modo kernel.
La memoria física en el destino se puede leer mediante ReadPhysical y ReadPhysical2, y escribirse mediante WritePhysical y WritePhysical2.
El método FillPhysical se puede usar para copiar un patrón de bytes, varias veces, en la memoria física del destino.
Una dirección del espacio de direcciones virtuales del destino se puede traducir a una dirección física en el destino mediante el método VirtualToPhysical . Las estructuras de paginación del sistema que se usan para traducir una dirección virtual a una dirección física se pueden encontrar mediante GetVirtualTranslationPhysicalOffsets.
Eventos
Cuando se modifica la memoria virtual o la memoria física del objetivo, se llama al método de devolución de llamada IDebugEventCallbacks::ChangeDebuggeeState.