在Linux中挂钩所有系统调用

时间:2015-07-23 01:06:00

标签: linux system-calls entry-point systrace

目标是在Linux中为所有系统调用添加一个钩子,也就是说,在调用任何300个Linux系统调用之前应该调用钩子函数。

sys_call_table次黑客攻击(例如[here]),但只允许连接一个或几个系统调用;也就是说,如果read()需要被劫持,sys_read中的sys_call_table条目将被修改为具有钩子处理程序的新函数。

当然,您可以手动挂钩所有300个系统调用条目;但我正在寻找一种更优雅的方法,几乎​​没有代码修改。

可能的方法是更改​​entry_64.S所在的文件ENTRY(system_call)。但是,由于我需要使用Linux内核模块并破解实时系统,我发现很难在正在运行的Linux系统中修改entry_64.S的内存映像。

所以我的问题是:

  1. 如果entry_64.S设计有意义,如何修改内核代码所在的实时内存区域(内核代码段)?
  2. 如果没有意义,一般来说,如何修改Linux src代码中的一个(或几个)位置,并允许所有sys调用被挂钩。
  3. PS:平台:Linux 3.16和x86_64

    PS2:我的问题再次与先前堆栈溢出问题中的那些sys_call_table黑客不同。详情见第2段。

0 个答案:

没有答案