Перехватить ВСЕ системные вызовы в Linux

Цель состоит в том, чтобы добавить перехватчик ко всем системным вызовам в Linux, то есть функция перехвата должна вызываться до того, как будет вызван любой из этих 300 системных вызовов Linux.

Есть sys_call_table хаки (например, [здесь]), которые, однако, позволяют перехватить один или несколько системных вызовов; то есть, если read() нужно перехватить, запись sys_read в sys_call_table изменяется на новую функцию, которая имеет обработчик перехвата.

Конечно, вы можете вручную перехватить все 300 записей системных вызовов; но я ищу более элегантный подход с небольшими изменениями кода.

Возможный подход - изменить файл entry_64.S, в котором находится ENTRY(system_call). Однако, поскольку мне нужно использовать модуль ядра Linux и взломать работающую систему, мне сложно изменить образ памяти entry_64.S в работающей системе Linux.

Итак, мой вопрос:

  1. Если конструкция entry_64.S имеет смысл, как изменить область оперативной памяти, в которой находится код ядра (сегмент кода ядра)?
  2. если это вообще не имеет смысла, как изменить одно (или несколько) мест в коде Linux src и разрешить перехват всех системных вызовов.

PS: платформа: Linux 3.16 и x86_64

PS2: Опять же, мой вопрос ОТЛИЧАЕТСЯ от тех sys_call_table хаков в предыдущих вопросах о переполнении стека. См. Подробности в параграфе 2.


person Richard    schedule 23.07.2015    source источник
comment
@msw, у меня другой вопрос, прочтите OP.   -  person Richard    schedule 23.07.2015
comment
@msw - если нет ответов (как в этом случае), то действительно не имеет значения, если вопрос будет изменен. Радикальное редактирование вопроса становится проблематичным только тогда, когда есть ответы.   -  person ChrisF    schedule 24.07.2015
comment
@Richard Вы нашли ответ на свой вопрос?   -  person Jake    schedule 11.01.2016
comment
opensource.com/article/17/7/   -  person Zan Lynx    schedule 19.07.2018