Цель состоит в том, чтобы добавить перехватчик ко всем системным вызовам в Linux, то есть функция перехвата должна вызываться до того, как будет вызван любой из этих 300 системных вызовов Linux.
Есть sys_call_table
хаки (например, [здесь]), которые, однако, позволяют перехватить один или несколько системных вызовов; то есть, если read()
нужно перехватить, запись sys_read
в sys_call_table
изменяется на новую функцию, которая имеет обработчик перехвата.
Конечно, вы можете вручную перехватить все 300 записей системных вызовов; но я ищу более элегантный подход с небольшими изменениями кода.
Возможный подход - изменить файл entry_64.S
, в котором находится ENTRY(system_call)
. Однако, поскольку мне нужно использовать модуль ядра Linux и взломать работающую систему, мне сложно изменить образ памяти entry_64.S
в работающей системе Linux.
Итак, мой вопрос:
- Если конструкция
entry_64.S
имеет смысл, как изменить область оперативной памяти, в которой находится код ядра (сегмент кода ядра)? - если это вообще не имеет смысла, как изменить одно (или несколько) мест в коде Linux src и разрешить перехват всех системных вызовов.
PS: платформа: Linux 3.16 и x86_64
PS2: Опять же, мой вопрос ОТЛИЧАЕТСЯ от тех sys_call_table
хаков в предыдущих вопросах о переполнении стека. См. Подробности в параграфе 2.