Điều đó tùy thuộc vào ý nghĩa của cuộc gọi hệ thống. Bạn có nghĩa là một cuộc gọi thư viện C (thông qua glibc) hoặc một cuộc gọi hệ thống thực tế? Các cuộc gọi thư viện C luôn kết thúc bằng cách sử dụng các cuộc gọi hệ thống ở cuối.
Cách cũ để thực hiện cuộc gọi hệ thống là thông qua phần mềm gián đoạn, tức là hướng dẫn int
. Windows có int 0x2e
trong khi Linux có int 0x80
. Hệ điều hành thiết lập một trình xử lý ngắt cho 0x2e hoặc 0x80 trong Bảng mô tả ngắt (IDT). Trình xử lý này sau đó thực hiện cuộc gọi hệ thống. Nó sao chép các đối số từ chế độ người dùng sang chế độ lõi (điều này được điều khiển bởi một quy ước cụ thể cho hệ điều hành). Trên Linux, các đối số được chuyển bằng cách sử dụng ebx
, ecx
, edx
, esi
và edi
. Trên Windows, các đối số được sao chép từ ngăn xếp. Trình xử lý sau đó thực hiện một số loại tra cứu (để tìm địa chỉ của hàm) và thực hiện cuộc gọi hệ thống. Sau khi hoàn thành cuộc gọi hệ thống, lệnh iret
sẽ trở về chế độ người dùng.
Cách mới là sysenter
và sysexit
. Hai hướng dẫn này về cơ bản thực hiện tất cả công việc đăng ký cho bạn. Hệ điều hành đặt hướng dẫn lên thông qua Đăng ký mô hình cụ thể (MSR). Sau đó nó thực tế giống như sử dụng int
.
Mã hạt nhân như thế nào, thư viện liên kết động, lắp ráp hoặc liên kết động? – MainID
Hạt nhân là hạt nhân đang chạy trên hệ thống của bạn, tức là hình ảnh hệ điều hành trong bộ nhớ. – tvanfosson