Episode

C0000005 Pelanggaran Akses - Jalankan

Pelanggaran Akses Eksekusi terjadi ketika aplikasi mencoba menjalankan kode dari alamat memori yang tidak valid. Agar valid, halaman memori harus memiliki status, perlindungan, dan jenis yang valid.

Memori harus dalam status MEM_COMMIT.

Memori dapat dari jenis apa pun; MEM_IMAGE, MEM_MAPPED, atau MEM_PRIVATE. Sebagian besar adalah MEM_IMAGE. MEM_PRIVATE digunakan untuk kode Just-in-Time (JIT) - contoh utamanya adalah JavaScript.

Perlindungan memori harus PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, atau PAGE_EXECUTE_WRITECOPY. Sebagian besar adalah PAGE_EXECUTE_READ. PAGE_EXECUTE_READWRITE dan PAGE_EXECUTE_WRITECOPY jarang terjadi dan dapat dianggap berbahaya, karena kode dapat dimodifikasi (disuntikkan).

Untuk melihat status, perlindungan, dan jenis alamat, gunakan alamat !address <>

  • Pastikan untuk mereferensikan nilai saat ini; bukan nilai alokasi
  • Setiap wilayah halaman memori (minimum 4K) melacak nilai perlindungan awal pada alokasi, dan nilai perlindungan saat ini, sebagaimana ditetapkan oleh keluarga fungsi VirtualProtect .

Pelanggaran terdeteksi oleh prosesor melalui Perlindungan Eksekusi Data.

Alamat memori mungkin tidak valid karena salah satu skenario umum ini:

  • Stack Corruption - alamat pengembalian panggilan didorong pada tumpukan. Variabel lokal berada di samping lokasi ini. Jika lokal memiliki buffer yang diserbu, alamat pengembalian rusak.
  • Penghitungan Referensi DLL - alamat valid , tetapi sekarang sedang diakses setelah DLL dibongkar
  • Bit-Flip - Masalah RAM (perangkat keras) di mana satu atau beberapa bit telah membalik (jarang)

Sumber Daya Tambahan:

Memiliki umpan balik? Kirimkan masalah di sini.