Sdílet prostřednictvím


Virtuální a fyzická paměť

Modul poskytuje řadu metod pro čtení a zápis virtuální a fyzické paměti cíle.

Virtuální paměť

Při zadávání umístění ve virtuální paměti cíle se použije virtuální adresní prostor cíle. V ladění v uživatelském režimu se jedná o virtuální adresní prostor aktuálního procesu. V ladění v režimu jádra se jedná o virtuální adresní prostor implicitního procesu. Další informace o aktuálním a implicitním procesu najdete v tématu Vlákna a procesy.

Virtuální paměť (cíle) je možné číst pomocí operace ReadVirtual a zapisovat pomocí writeVirtual.

Ukazatele v paměti cíle lze číst a zapisovat pomocí pomocných metod ReadPointersVirtual a WritePointersVirtual. Tyto metody se automaticky převedou mezi 64bitovými ukazateli používanými modulem a nativními ukazateli používanými cílem. Tyto metody jsou užitečné při vyžádání paměti obsahující ukazatele, které budou použity pro následné požadavky – například ukazatel na řetězec.

Metody SearchVirtual a SearchVirtual2 lze použít k vyhledání vzoru bajtů ve virtuální paměti cíle.

FillVirtual metoda lze použít ke kopírování vzoru bajtů, vícekrát, do virtuální paměti cíle.

Virtuální paměť cíle lze také číst a zapisovat způsobem, který obchází mezipaměť virtuální paměti modulu ladicího programu pomocí metod ReadVirtualUncached a WriteVirtualUncached. Tyto verze bez mezipaměti jsou užitečné pro čtení virtuální paměti, která je ze své podstaty nestálá, například paměťově mapovaných oblastí zařízení, aniž by došlo ke znečištění nebo zneplatnění mezipaměti. Přístup k paměti bez mezipaměti by se měl používat jenom v situacích, kdy je potřeba, protože výkon přístupu bez mezipaměti může být výrazně nižší než přístup uložený v mezipaměti.

Modul poskytuje některé metody usnadnění čtení řetězců z virtuální paměti cíle. Ke čtení vícebajtového řetězce z cíle použijte ReadMultiByteStringVirtual a ReadMultiByteStringVirtualWide. Ke čtení řetězce Unicode z cíle použijte ReadUnicodeStringVirtual a ReadUnicodeStringVirtualWide.

Chcete-li najít informace o umístění paměti, použijte GetOffsetInformation. Ne všechny virtuální adresní prostory v cíli obsahují platnou paměť. K vyhledání platné paměti v rámci oblasti použijte GetValidRegionVirtual. Pokud ručně vyhledáte platnou paměť v cíli, metoda GetNextDifferentlyValidOffsetVirtual najde další umístění, kde se může platnost změnit.

Fyzická paměť

Paměťový prostor může být přímo přístupný pouze při ladění v režimu jádra.

Fyzickou paměť v cíli lze číst pomocí readphysical a ReadPhysical2 a zapisovat pomocí WritePhysical a WritePhysical2.

FillPhysical metodu lze použít ke kopírování vzoru bajtů, vícekrát, do fyzické paměti cíle.

Adresu ve virtuálním adresním prostoru cíle lze přeložit na fyzickou adresu v cíli pomocí metody VirtualToPhysical . Stránkovací struktury systému používané k překladu virtuální adresy na fyzickou adresu lze najít pomocí GetVirtualTranslationPhysicalOffsets.

Dění

Když dojde ke změně virtuální nebo fyzické paměti cíle, volá se metoda zpětného volání IDebugEventCallbacks::ChangeDebuggeeState .