Bagikan melalui


Memori Virtual dan Fisik

Mesin menyediakan sejumlah metode untuk membaca dan menulis memori virtual dan fisik target.

Memori Virtual

Saat menentukan lokasi dalam memori virtual target, ruang alamat virtual target digunakan. Dalam debugging mode pengguna, ini adalah ruang alamat virtual dari proses saat ini. Dalam debugging mode kernel, ini adalah ruang alamat virtual dari proses implisit. Lihat Utas dan Proses untuk informasi selengkapnya tentang proses saat ini dan implisit.

Memori virtual (dari target) dapat dibaca dengan menggunakan ReadVirtual dan ditulis menggunakan WriteVirtual.

Penunjuk dalam memori target dapat dibaca dan ditulis dengan menggunakan metode praktis ReadPointersVirtual dan WritePointersVirtual. Metode ini akan secara otomatis mengonversi antara pointer 64-bit yang digunakan oleh mesin dan pointer asli yang digunakan oleh target. Metode ini berguna saat meminta memori yang berisi pointer yang akan digunakan untuk permintaan berikutnya -- misalnya, penunjuk ke string.

Metode SearchVirtual dan SearchVirtual2 dapat digunakan untuk mencari pola byte tertentu dalam memori virtual target.

Metode FillVirtual dapat digunakan untuk menyalin pola byte, beberapa kali, ke memori virtual target.

Memori virtual target juga dapat dibaca dan ditulis dengan cara yang melewati cache memori virtual mesin debugger menggunakan metode ReadVirtualUncached dan WriteVirtualUncached. Versi yang tidak di-cache ini berguna untuk membaca memori virtual yang secara inheren volatil, seperti area perangkat yang dipetakan memori, tanpa mencemari atau membatalkan cache. Akses memori yang tidak di-cache hanya boleh digunakan dalam situasi ketika diperlukan, karena performa akses yang tidak di-cache dapat secara signifikan lebih rendah daripada akses yang di-cache.

Mesin menyediakan beberapa metode kemudahan untuk membaca string dari memori virtual target. Untuk membaca string multibyte dari target, gunakan ReadMultiByteStringVirtual dan ReadMultiByteStringVirtualWide. Untuk membaca string Unicode dari target, gunakan ReadUnicodeStringVirtual dan ReadUnicodeStringVirtualWide.

Untuk menemukan informasi tentang lokasi memori, gunakan GetOffsetInformation. Tidak semua ruang alamat virtual dalam target berisi memori yang valid. Untuk menemukan memori yang valid dalam suatu wilayah, gunakan GetValidRegionVirtual. Saat mencari memori yang valid secara manual dalam target, metode GetNextDifferentlyValidOffsetVirtual akan menemukan lokasi berikutnya di mana validitas dapat berubah.

Memori Fisik

Memori fisik hanya dapat langsung diakses dalam debugging mode kernel.

Memori fisik pada target dapat dibaca dengan menggunakan ReadPhysical dan ReadPhysical2, dan ditulis dengan menggunakan WritePhysical dan WritePhysical2.

Metode FillPhysical dapat digunakan untuk menyalin pola byte, beberapa kali, ke memori fisik target.

Alamat di ruang alamat virtual target dapat diterjemahkan ke alamat fisik pada target dengan menggunakan metode VirtualToPhysical . Struktur halaman sistem yang digunakan untuk menerjemahkan alamat virtual ke alamat fisik dapat ditemukan dengan menggunakan GetVirtualTranslationPhysicalOffsets.

Peristiwa

Ketika memori virtual atau fisik target diubah, metode panggilan balik IDebugEventCallbacks::ChangeDebuggeeState dipanggil.