2012-01-12 2 views
1

Есть ли возможность получить доступ к sys_call_table из моего собственного модуля для Kernel 2.6+? Я буду признателен, если кто-то может дать ссылки на статьи или инструкции. Мне нужен метод без необходимости изменять исходный код Kernel. Я знаю, что было легко на Linux 2.4 Kernel, вы могли бы использовать внешний символ, однако эта способность была удалена с Kernel 2.6.доступ к sys_call_table в ядре 2.6+

+2

Эта способность была удалена, потому что обычно это неправильный способ делать то, что вы пытаетесь сделать, и потому, что это слишком легко для руткитов. Что вы на самом деле пытаетесь сделать, в конце концов? – bdonlan

+0

Попытка заменить системные вызовы своими собственными методами. – RomanKapitonov

+0

Модуль всегда является неправильным способом изменения системных вызовов ... –

ответ

2

Как вы действительно пытаетесь сделать это, замените syscall своей собственной функцией, я бы рекомендовал использовать kprobes для этого вида работы, вы можете легко сломать любой адрес ядра (или символ (например, sys_exit, sys_whateversyscall) и изменить путь выполнения, все это во время выполнения, с модулем ядра, если вам нужно :) У него очень низкие накладные расходы.

Kprobes (или jprobes, если вы только добавляете свой код в syscall, а не полностью его заменяете), работая путем динамической замены инструкции (например, первой инструкцией вашей записи в syscall) прерыванием (например, int3 на x86). Внутри обработчика do_int3 уведомитель уведомляет kprobes, который, в свою очередь, передает выполнение вашей зарегистрированной функции, из которой вы можете сделать почти что угодно.

Очень хорошая документация дана в документации/kprobes.txt, так как крошечный пример в образцах/kprobes/kprobes_example.c (в этом примере они разбиваются на do_fork, чтобы регистрировать каждую вилку в системе). Он имеет очень простой API и теперь очень портативен.

1

Я ответил на несколько другие вопросы, подобные этому:

Углубленное объяснение моего TPE LKM модуля, который делает это, см this explanation на моем блоге

Примечание: Как уже упоминалось в комментариях к вашему вопросу, это не правильный способ сделать вещи , Лучше всего перекомпилировать ядро, хотя я понимаю, что есть ситуации, когда это не вариант.

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