доступ к sys_call_table в ядре 2.6+ - PullRequest
1 голос
/ 12 января 2012

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

Ответы [ 3 ]

2 голосов
/ 13 января 2012

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

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

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

1 голос
/ 12 января 2012

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

Подробное объяснение моего TPE LKM модуля, который это делает, см. это объяснение в моем блоге

ПРИМЕЧАНИЕ: Как уже упоминалось в комментариях к вашему вопросу, это неправильный способ сделать что-то.Лучше всего перекомпилировать ядро, хотя я понимаю, что есть ситуации, когда это невозможно.

0 голосов
/ 12 января 2012

Начиная с ядра 2.6. * Таблица системных вызовов больше не экспортируется.Здесь вы можете найти, как реэкспортировать его:

http://www.sans.org/reading_room/whitepapers/honors/linux-kernel-rootkits-protecting-systems_1500

Посмотрите на стр. 144.

...