目标是在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
的内存映像。
所以我的问题是:
entry_64.S
设计有意义,如何修改内核代码所在的实时内存区域(内核代码段)?PS:平台:Linux 3.16和x86_64
PS2:我的问题再次与先前堆栈溢出问题中的那些sys_call_table
黑客不同。详情见第2段。