Как изменить таблицу системных вызовов Linux в версии ядра 6+?C++

Программы на C++. Форум разработчиков
Anonymous
Как изменить таблицу системных вызовов Linux в версии ядра 6+?

Сообщение Anonymous »

Мне нужно указать внешней библиотеке выполнить системный вызов функции, определенной в моем приложении пользовательского пространства.
  • Я не могу использовать LD_PRELOAD, потому что я нужна статическая связь.
  • Я не могу использовать ftrace/модуль ядра Linux для перехвата вызова, поскольку для этого потребуется, чтобы функция находилась в пространстве ядра и это невозможно. Это C++ и довольно много кода.
А как насчет модуля ядра, изменяющего таблицу системных вызовов, чтобы она указывала на адрес функции? Мое приложение найдет функцию по тому же адресу.
Можно ли перезаписать таблицу системных вызовов в последних ядрах Linux?Раньше вы могли найти таблицу с помощью kallsyms_lookup_name и изменить значение CR0, чтобы предоставить разрешения. Однако я думаю, что ядро ​​Linux 5 или 6 внесло изменения, чтобы остановить это. Однако я не до конца понимаю, насколько изменения остановили это. Я думаю, они прекратили экспортировать kallsyms_lookup_name, так что, может быть, это все еще возможно, просто более сложно?
(Я знаю, что редактирование таблицы не одобряется, но это не для клиентов использования нет никаких последствий для безопасности/это закрытая система).

Подробнее здесь: https://stackoverflow.com/questions/786 ... -version-6

Вернуться в «C++»