2013-06-20 3 views
8

Я хочу реализовать свой собственный системный вызов. (См ссылку ниже)Как реализовать собственный системный вызов без перекомпиляции ядра Linux?

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

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

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

ответ

14

Вы не можете.

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

+1

Ну, что было коротким и сладким. – BoBTFish

+1

Ну, технически, в зависимости от места и т. Д., С модулем ядра вы можете исправить свой собственный системный вызов в существующую таблицу системных вызовов. Но это грязно, ненадежно и определенно не очень хорошая идея. –

+0

Ну, технически IOCTL - системный вызов. Таким образом, когда вы можете использовать его для обертывания ваших данных и общения на земле пользователя и ядра, зачем вы добавляете новый системный вызов? – Ash

3

Несомненно, вы можете.

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

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

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

Смотрите эту anwers Подробности:

Implementing Linux System Call using LKM

How do 32-bit applications make system calls on 64-bit Linux?

:)

+1

Метод, который вы описываете, невероятно уродлив и небезопасен - если вы не невероятно осторожны в этом, есть значительный шанс, что он будет разбивать машину при загрузке. Ни при каких обстоятельствах я не рассматривал бы использование модуля, который сделал бы это на производственной системе. – duskwuff

+1

Что касается метода, он работает, но вопросы реализации, вы правы. Правильная реализация требует сильных навыков и этой задачи не для присосок :) –

Смежные вопросы