目标是为 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 代码中的一个(或几个)位置并允许所有 sys 调用被挂钩。
PS:平台:Linux 3.16 和 x86_64
PS2:我的问题再次与sys_call_table
之前堆栈溢出问题中的那些黑客攻击不同。详见第 2 段。