Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
купить дешевый 
компьютер родом из Dhgate.com




Lines Club

Ищем достойных соперников.

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра Linux
Назад Вперед

Модификация системных вызовов

Системные вызовы из пользовательских процессов, как это детально обсуждалось ранее, все проходят через таблицу с именем sys_call_table (это своего рода case-селектор, который передаёт управление на обработчик требуемого запроса). Иногда хотелось бы подменить или добавить позицию (адрес обработчика) в таблице (это техника, благополучно известная программистам ещё со времён MS-DOS). Такая модификация бывает нужна, например (этим перечень возможностей далеко не исчерпывается):

  • Для мониторинга и накопления статистики по какому-либо существующему системному вызову;
  • Для добавления собственного обработчика нового системного вызова, используемого прикладными программами пакета;
  • Так делают программы-вирусы или недоброжелательные программы, пытающиеся перехватить контроль над компьютером;

До определённого времени (до версии 2.6) ядро экспортировало адрес таблицы переходов системных вызовов sys_call_table[]. На сейчас, этот символ может присутствовать в таблице имён ядра (/proc/kallsyms), но не экспортируется для использования модулями (нужен тип T):

$ cat /proc/kallsyms | grep 'sys_call'

	c052476b t proc_sys_call_handler
	c07ab3d8 R sys_call_table

Тем не менее, ядро всегда импортирует символ sys_close, находящийся в начальных позициях таблицы sys_call_table[]:

$ cat /proc/kallsyms | grep sys_close

	c047047a T sys_close

Предыдущий раздел: Оглавление Следующий раздел:
Операции I/O пространства пользователя   Отладка в ядре

Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют