引擎提供許多方法來讀取和寫入目標的虛擬和實體記憶體。
虛擬記憶體
指定目標虛擬記憶體中的位置時,會使用目標的虛擬位址空間。 在使用者模式偵錯中,這是目前進程的虛擬位址空間。 在核心模式偵錯中,這是隱含進程的虛擬位址空間。 如需目前及隱含進程的相關資訊,請參閱執行緒和進程。
您可以使用 ReadVirtual 讀取 (目標) 的虛擬記憶體,並使用 WriteVirtual 寫入。
您可以使用方便的方法 ReadPointersVirtual 和 WritePointersVirtual 來讀取和寫入目標記憶體中的指標。 這些方法會自動在引擎使用的 64 位指標和目標使用的原生指標之間進行轉換。 當您需要分配包含指標的記憶體,而這些指標將用於後續的操作時,這些方法非常有用。例如,一個指向字串的指標。
SearchVirtual 和 SearchVirtual2 方法可用來搜尋目標的虛擬記憶體,以取得位元組模式。
FillVirtual 方法可用來將位元組模式多次複製到目標的虛擬記憶體。
目標的虛擬記憶體也可以使用 ReadVirtualUncached 和 WriteVirtualUncached 方法,略過偵錯工具引擎的虛擬記憶體快取來讀取和寫入。 這些未經快取的版本可用於讀取天生易失性的虛擬記憶體,例如記憶體映射裝置區域,且不會干擾或使快取失效。 未快取記憶體存取只能在需要的情況下使用,因為未快取存取的效能可能明顯低於快取存取。
引擎提供了一些方便的方法來從目標的虛擬記憶體讀取字串。 若要從目標讀取多位元組字串,請使用 ReadMultiByteStringVirtual 和 ReadMultiByteStringVirtualWide。 若要從目標讀取 Unicode 字串,請使用 ReadUnicodeStringVirtual 和 ReadUnicodeStringVirtualWide。
若要尋找記憶體位置的相關資訊,請使用 GetOffsetInformation。 並非目標中的所有虛擬位址空間都包含有效的記憶體。 若要在區域內尋找有效的記憶體,請使用 GetValidRegionVirtual。 在目標中手動搜尋有效記憶體時, 方法 GetNextDifferentlyValidOffsetVirtual 會尋找有效性可能變更的下一個位置。
實體記憶體
實體記憶體只能在核心模式偵錯中直接存取。
可以使用 ReadPhysical 和 ReadPhysical2 讀取目標上的實體記憶體,並使用 WritePhysical 和 WritePhysical2 寫入。
FillPhysical 方法可用來將位元組模式多次複製到目標的實體記憶體。
目標虛擬位址空間中的位址可以使用 VirtualToPhysical 方法轉譯為目標上的實體位址。 您可以使用 GetVirtualTranslationPhysicalOffsets 來尋找用來將虛擬位址轉譯為實體位址的系統分頁結構。
事件
當目標的虛擬或實體記憶體變更時,會呼叫 IDebugEventCallbacks::ChangeDebuggeeState 回呼方法。