Встраивание В Ядро ​​Linux: Функции Перехвата

Перехват функций ядра — это базовый метод, позволяющий переопределить/расширить различные механизмы ядра.

Учитывая, что ядро Linux практически полностью написано на языке C, за исключением небольших архитектурно-зависимых частей, можно утверждать, что для реализации встраивания в большинство компонентов ядра достаточно иметь возможность перехватывать соответствующие функции.

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

Целью перехвата любой функции является получение контроля в момент ее вызова.

Дальнейшие действия зависят от конкретных задач.

В одних случаях необходимо заменить системную реализацию алгоритма на свою, в других — дополнить ее.

При этом важно оставить возможность использования перехваченной функции в своих целях.

Традиционным подходом к перехвату стало использование концепции «оберток», позволяющей реализовать пред- и постобработку, сохраняя при этом возможность доступа к исходному функционалу, представленному перехватываемой функцией.

В основе большинства методов перехвата функций лежит патчинг — модификация кода ядра таким образом, чтобы обеспечить возможность передачи управления функции-перехватчику при вызове целевой функции.

Более того, благодаря развитой системе команд архитектуры x86, существует множество вариантов изменения потока выполнения (да, JMP — лишь один из них: подробнее ).



Техника перехвата

Суть описываемого метода перехвата будет заключаться в модификации пролога (начала) целевой функции таким образом, чтобы ее выполнение процессором приводило к передаче управления функции-обработчику.

Другими словами, для каждой целевой функции мы модифицируем пролог, записывая в его начало команду JMP. Это переключит поток выполнения с целевой функции на соответствующий обработчик.

Например, если перед перехватом функция inode_permission имеет форму:

   

inode_permission: 0xffffffff811c4530 <+0>:

Теги: #ядро Linux #перехват #C++ #Системное программирование
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.