GNU/Linux >> Belajar Linux >  >> Linux

Ruang alamat proses 32-bit di linux 64-bit

Mengutip sumber kernel:“Penunjuk kernel memiliki informasi yang berlebihan, sehingga kita dapat menggunakan skema di mana kita dapat mengembalikan kode kesalahan atau penunjuk [...] dengan nilai pengembalian yang sama.

Nilai -1..-4095 (memetakan ke 0xfffff000–0xffffffff dalam mode 32-bit) dicadangkan untuk nilai errno tingkat kernel. 4KB lainnya dari 0xffffe000–0xffffffff dibebaskan untuk halaman ajaib vsyscall vdso, tetapi karena halaman vdso dapat dipindahkan sejak beberapa bulan, area ini berpotensi tidak berpenghuni, artinya, [stack] entri di /proc/*/maps berakhir pada 0xffffdfff selalu terlepas dari apakah [vdso] dipetakan pada 0xffffe000 atau di tempat lain.


Beberapa memori kernel dapat berada di dalam ruang alamat ruang pengguna aplikasi, dan disortir dengan mmap dengan PROT_NONE . Beberapa ruang alamat kemudian akan digunakan, tetapi tanpa dapat diakses oleh program (sehingga korupsi tidak mungkin terjadi).


Linux
  1. Linux – Perbedaan Antara Ruang Pengguna dan Ruang Kernel?

  2. Linux – Apa Memori Tinggi dan Memori Rendah Di Linux?

  3. Linux – Mengapa Ada Kebijakan Kernel Linux Untuk Tidak Pernah Melanggar Ruang Pengguna?

  1. Linux – Apakah Kernel Linux/unix yang Berbeda Dapat Dipertukarkan?

  2. Apa yang lebih baik int 0x80 atau syscall dalam kode 32-bit di Linux?

  3. Mengapa kernel dipetakan ke ruang alamat yang sama dengan proses?

  1. Bagaimana cara memetakan buffer kernel Linux ke ruang pengguna?

  2. Menemukan Perpustakaan 32-bit di Linux 64-bit

  3. Bagaimana cara menentukan apakah file biner linux 32-bit atau 64-bit?