Как вызвать определяемый пользователем системный вызов как функцию

#c #kernel #system-calls #openbsd

#c #ядро #системные вызовы #openbsd

Вопрос:

Допустим, у меня есть определяемый пользователем системный вызов: foo (с кодовым номером 500).

Чтобы вызвать его, я просто записываю в файл C:

 syscall(SYS_code, args);
  

Как я могу вызвать его, используя just foo(args) ?

Комментарии:

1. «Как я могу вызвать его, используя только foo(аргументы)?» — Создайте функцию foo , которая выполняет требуемый системный вызов. Таким образом, другой код может просто вызывать foo .

Ответ №1:

Вы не можете. Нет, если вы сначала не убедите разработчиков ядра, что ваш системный вызов заслуживает добавления, затем он будет добавлен, а затем библиотеки пользовательского пространства, такие как стандартная библиотека C (glibc в большинстве дистрибутивов Linux), решат реализовать для него оболочку, как они делают для большинства системных вызовов.

Другими словами: поскольку вышесказанное невозможно, все, что вы можете сделать, это определить функцию-оболочку самостоятельно в своей собственной программе.

 #define SYS_foo 500

long foo(int a, char *b) {
    return syscall(SYS_foo, a, b);
}