Rumah > Tutorial sistem > LINUX > teks badan

Memperkenalkan proses panggilan sistem di bawah Linux

WBOY
Lepaskan: 2024-04-11 09:43:01
ke hadapan
882 orang telah melayarinya
Proses:

Mari kita lihat gambar dahulu untuk mendapatkan pemahaman yang kasar.

Memperkenalkan proses panggilan sistem di bawah Linux

Pertama sekali, apa yang boleh dipanggil terus oleh aplikasi ialah API yang disediakan oleh sistem, yang boleh dilakukan dalam mod pengguna (Ring3).

Kemudian API yang sepadan akan menyimpan nombor panggilan sistem yang sepadan ke daftar eax (langkah ini dilaksanakan melalui pemasangan sebaris), dan kemudian gunakan int 0x80 untuk mencetuskan gangguan (pemasangan sebaris) dan masukkan fungsi pemprosesan gangguan (fungsi ini sepenuhnya ditulis dalam kod pemasangan), kali ini ia memasuki keadaan kernel (Ring0).

Dalam fungsi pengendalian gangguan, panggilan sistem yang sepadan dengan nombor panggilan sistem akan dipanggil. Dalam fungsi ini, dua daftar ds dan es akan ditetapkan untuk menunjuk ke ruang kernel. Dengan cara ini, kami tidak boleh memindahkan data daripada mod pengguna ke mod kernel (seperti dalam open(const char * nama fail, bendera int, ...), alamat rentetan yang ditunjukkan oleh penunjuk nama fail adalah dalam ruang pengguna, Jika anda mendapatkannya dari tempat yang sepadan dalam ruang kernel, rentetan itu tidak akan wujud sama sekali), apakah yang perlu anda lakukan? Daftar fs dalam pengendali gangguan ditetapkan untuk menunjuk ke ruang pengguna, jadi masalah itu diselesaikan.

Dalam panggilan sistem, operasi yang sepadan dilakukan, seperti membuka fail, menulis fail, dsb.

Selepas diproses, ia akan kembali kepada fungsi pemprosesan gangguan, dan nilai pulangan disimpan dalam daftar eax.

Apabila kembali ke API daripada fungsi pengendalian gangguan, nilai pulangan masih disimpan dalam daftar eax. Pada masa ini, ia dipulihkan daripada mod kernel kepada mod pengguna.

Dapatkan nilai daripada eax dalam API, buat pertimbangan yang sepadan dan kembalikan nilai yang berbeza untuk menunjukkan selesainya operasi.

Mengapa begitu banyak panggilan sistem boleh dipanggil menggunakan int 0x80 interrupt?

Dalam mod dilindungi, terdapat pelbagai gangguan, dan panggilan sistem terikat untuk mengganggu nombor 0x80. Apabila panggilan sistem akan dipanggil, int 0x80 dicetuskan, dan fungsi pengendalian gangguan menggunakan eax untuk mengetahui panggilan sistem yang ingin dipanggil. Sebabnya ialah terdapat terlalu banyak panggilan sistem dan nombor gangguan tidak akan mencukupi, jadi satu digunakan untuk pengurusan berpusat.

Terdapat jadual dalam sistem pengendalian yang digunakan untuk menyimpan alamat pelbagai fungsi panggilan sistem. Jadual ini ialah tatasusunan, jadi alamat fungsi yang berbeza boleh diakses melalui subskrip. Oleh itu, satu nombor gangguan + pelbagai nombor panggilan sistem boleh digunakan untuk mengurus berbilang panggilan sistem.

Atas ialah kandungan terperinci Memperkenalkan proses panggilan sistem di bawah Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:linuxprobe.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan