共用方式為


虛擬和實體記憶體

引擎提供許多方法來讀取和寫入目標的虛擬和實體記憶體。

虛擬記憶體

在目標的虛擬記憶體中指定位置時,會使用目標的虛擬位址空間。 在使用者模式偵錯中,這是目前進程的虛擬位址空間。 在核心模式偵錯中,這是隱含進程的虛擬位址空間。 如需目前和隱含進程的詳細資訊,請參閱 執行緒和進程

您可以使用 ReadVirtual 並使用 WriteVirtual來讀取目標 (虛擬記憶體) 。

您可以使用方便的方法 ReadPointersVirtualWritePointersVirtual來讀取和寫入目標記憶體中的指標。 這些方法會自動在引擎所使用的 64 位指標與目標所使用的原生指標之間轉換。 當要求包含將用於後續要求的指標的記憶體時,這些方法很有用,例如字串的指標。

SearchVirtualSearchVirtual2方法可用來搜尋目標的虛擬記憶體中的位元組模式。

FillVirtual方法可用來將位元組模式多次複製到目標的虛擬記憶體。

您也可以使用 ReadVirtualUncachedWriteVirtualUncached方法來讀取和寫入目標虛擬記憶體,以略過偵錯工具引擎的虛擬記憶體快取。 這些未快取的版本適用于讀取原本會變動的虛擬記憶體,例如記憶體對應裝置區域,而不會感染或使快取失效。 未快取的記憶體存取應該只在需要時使用,因為未快取存取的效能可能會明顯低於快取存取。

引擎提供一些方便的方法,從目標的虛擬記憶體讀取字串。 若要從目標讀取多位元組字元串,請使用 ReadMultiByteStringVirtualReadMultiByteStringVirtualWide。 若要從目標讀取 Unicode 字串,請使用 ReadUnicodeStringVirtualReadUnicodeStringVirtualWide

若要尋找記憶體位置的相關資訊,請使用 GetOffsetInformation。 目標中的所有虛擬位址空間都不包含有效的記憶體。 若要在區域內尋找有效的記憶體,請使用 GetValidRegionVirtual。 手動搜尋目標中的有效記憶體時, GetNextDifferentlyValidOffsetVirtual 方法會尋找可能變更有效性的下一個位置。

實體記憶體

實體記憶體只能在核心模式偵錯中直接存取。

您可以使用 ReadPhysicalReadPhysical2讀取目標上的實體記憶體,並使用 WritePhysical 和 WritePhysical2寫入。

FillPhysical方法可用來將位元組模式多次複製到目標的實體記憶體。

您可以使用 VirtualToPhysical 方法,將目標虛擬位址空間中的位址轉譯為目標上的實體位址。 您可以使用 GetVirtualTranslationPhysicalOffsets來找到用來將虛擬位址轉譯為實體位址的系統分頁結構。

事件

當目標的虛擬或實體記憶體變更時,會呼叫 IDebugEventCallbacks::ChangeDebuggeeState 回 呼方法。