Как реализовать собственный системный вызов без перекомпиляции ядра Linux?

Я хочу реализовать свой собственный системный вызов. (См. ниже ссылку)

http://www.tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/

но добавление нового системного вызова требует компиляции ядра.

Как реализовать свой собственный системный вызов без перекомпиляции ядра Linux?

2 ответов


ты не можешь.

без перекомпиляции ядра, все, что вы можете сделать, это построить и загрузить модули ядра, и модули ядра не могут добавлять новые системные вызовы.


конечно, вы можете.

короче говоря, вам нужно будет исправить запущенное ядро.

есть по крайней мере 2 способа добавить новый syscall:

  1. расширить существующие таблицы системных вызовов (sys_call_table и ia32_sys_call_table) и инструкция проверки предела системного вызова заплаты (usally cmp на x86) в любой из записей системного вызова (system_call, ia32_system_all etc...)
  2. скопируйте существующие таблицы системных вызовов, разверните их по мере необходимости, исправьте инструкцию по отправке системных вызовов (обычно call на x86), чтобы указать на копию таблицы и исправление инструкции проверки ограничения системного вызова в любой из записей системного вызова.

см. этот anwers для деталей:

реализация системного вызова Linux с помощью LKM

как 32-разрядные приложения делают системные вызовы на 64-разрядном Linux?

:)