У сучасному коді x86 інструкцією перехоплення є системний виклик [1], який діє аналогічно виклику. Замість переходу до функції в тій же програмі, syscall запускає перемикач режимів і переходить до підпрограми в частині пам’яті ядра.
Системний виклик ініціюється програмою, яка виконує певну інструкцію, яка запускає перемикання в режим ядра, дозволяючи програмі запитувати службу від ОС. Потім ОС обробляє запит, виконує необхідні операції та повертає результат програмі.
Інструкція виклику є використовується для виклику функції. Інструкція CALL виконує дві операції: Вона надсилає адресу повернення (адресу, яка знаходиться відразу після інструкції CALL) у стек. Він змінює EIP на адресата виклику.
виклики функцій x86. Під час виклику функції стек виділяє додатковий простір для зберігання локальних змінних та іншої інформації, що стосується цієї функції.. Пам’ятайте, що стек зменшується, тому цей додатковий простір буде за нижчими адресами в пам’яті.
Для більшості файлових систем програма ініціалізує доступ до файлу у файловій системі за допомогою відкритого системного виклику. Це виділяє ресурси, пов’язані з файлом (дескриптор файлу), і повертає дескриптор, який процес використовуватиме для посилання на цей файл. У деяких випадках відкриття здійснюється першим доступом.
Інструкція системного виклику є основною інструкцією перехоплення в 64-розрядних системах x86. Більш ранні програми x86 виконували системні виклики, запускаючи переривання за допомогою інструкції int $0x80; ядро використовувало б iret для повернення з переривання.
Накладні витрати на створення системного виклику не дуже великі! це дає менше мікросекунди (тобто сто тактів процесора). Деякі системні виклики використовують vdso(7), щоб зменшити накладні витрати. Однак для даного системного виклику ядро виконує певну роботу.