3

目标是为 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 代码中的一个(或几个)位置并允许所有 sys 调用被挂钩。

PS:平台:Linux 3.16 和 x86_64

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

4

0 回答 0