如果有人试图通过sys_call_table
挂钩某些系统调用 - 挂钩,例如sys_execve
这会失败,因为它们是由存根间接调用的。对于sys_execve
,这是stub_execve
(比较LXR上的汇编代码)。
但这些存根有什么用呢?为什么只有execve(2)
和fork(2)
之类的某些系统调用需要存根以及如何连接到x86_64?是否存在挂钩存根系统调用(在可装入内核模块中)的解决方法?
答案 0 :(得分:2)
来自here,它说:
“需要保存完整的完整堆栈帧的某些特殊系统调用。”
我认为execve只是这些特殊系统调用之一。
从stub_execve的代码中,如果要挂钩,至少可以尝试:
(1)了解这些汇编代码的含义并自行完成,然后您可以在自己的汇编代码中调用自己的函数。
(2)从汇编代码的中间,它有call sys_execve
,你可以将sys_execve的地址替换为你自己的钩子函数。