Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Silnik udostępnia wiele metod odczytywania i zapisywania pamięci wirtualnej i fizycznej obiektu docelowego.
Pamięć wirtualna
Podczas określania lokalizacji w pamięci wirtualnej obiektu docelowego używana jest wirtualna przestrzeń adresowa obiektu docelowego. W przypadku debugowania w trybie użytkownika jest to wirtualna przestrzeń adresowa bieżącego procesu. W debugowaniu w trybie jądra jest to wirtualna przestrzeń adresowa procesu domyślnego. Aby uzyskać więcej informacji na temat bieżącego i niejawnego procesu, zobacz Wątki i procesy .
Pamięć wirtualna (docelowa) może być odczytywana przy użyciu funkcji ReadVirtual i zapisu przy użyciu metody WriteVirtual.
Wskaźniki w pamięci obiektu docelowego można odczytywać i zapisywać przy użyciu metod wygody ReadPointersVirtual i WritePointersVirtual. Metody te automatycznie przekonwertują między 64-bitowymi wskaźnikami używanymi przez silnik a natywnymi wskaźnikami używanymi przez obiekt docelowy. Te metody są przydatne podczas żądania pamięci zawierającej wskaźniki, które będą używane dla kolejnych żądań — na przykład wskaźnik do ciągu.
Metody SearchVirtual i SearchVirtual2 mogą służyć do wyszukiwania pamięci wirtualnej obiektu docelowego pod kątem wzorca bajtów.
Metoda FillVirtual może służyć do kopiowania wzorca bajtów( wiele razy) do pamięci wirtualnej obiektu docelowego.
Pamięć wirtualna obiektu docelowego można również odczytywać i zapisywać w sposób, który pomija pamięć wirtualną aparatu debugera przy użyciu metod ReadVirtualUncached i WriteVirtualUncached. Niebuforowane wersje pamięci są przydatne do odczytywania pamięci wirtualnej, która jest z natury ulotna, takich jak obszary urządzeń mapowanych w pamięci wirtualnej, bez zanieczyszczania lub unieważniania cache'u. Dostęp do pamięci bez buforowania powinien być używany tylko w sytuacjach, gdy jest to wymagane, ponieważ wydajność dostępu niebuforowanego może być znacznie niższa niż dostęp w pamięci podręcznej.
Silnik udostępnia pewne wygodne metody odczytywania ciągów z pamięci wirtualnej celu. Aby odczytać ciąg wielobajtowy z obiektu docelowego, użyj polecenia ReadMultiByteStringVirtual i ReadMultiByteStringVirtualWide. Aby odczytać ciąg Unicode z obiektu docelowego, użyj polecenia ReadUnicodeStringVirtual i ReadUnicodeStringVirtualWide.
Aby znaleźć informacje o lokalizacji pamięci, użyj polecenia GetOffsetInformation. Nie wszystkie wirtualne przestrzenie adresowe w obiekcie docelowym zawierają prawidłową pamięć. Aby znaleźć prawidłową pamięć w regionie, użyj polecenia GetValidRegionVirtual. Podczas ręcznego wyszukiwania prawidłowej pamięci w obiekcie docelowym metoda GetNextDifferentlyValidOffsetVirtual znajdzie następną lokalizację, w której może ulec zmianie ważność.
Pamięć fizyczna
Dostęp do pamięci fizycznej można uzyskać bezpośrednio tylko w debugowaniu w trybie jądra.
Pamięć fizyczna w obiekcie docelowym może być odczytywana przy użyciu funkcji ReadPhysical i ReadPhysical2 oraz zapisywanych przy użyciu funkcji WritePhysical i WritePhysical2.
Metoda FillPhysical może służyć do kopiowania wzorca bajtów( wiele razy) do pamięci fizycznej obiektu docelowego.
Adres w wirtualnej przestrzeni adresowej obiektu docelowego można przetłumaczyć na adres fizyczny w obiekcie docelowym przy użyciu metody VirtualToPhysical . Struktury stronicowania systemu używane do tłumaczenia adresu wirtualnego na adres fizyczny można znaleźć za pomocą polecenia GetVirtualTranslationPhysicalOffsets.
Zdarzenia
Gdy zostanie zmieniona pamięć wirtualna lub fizyczna obiektu docelowego, wywoływana jest metoda zwrotna IDebugEventCallbacks::ChangeDebuggeeState.