为什么某些Linux x86_64系统调用需要存根?

如果试图通过sys_call_table-hook挂钩某些系统调用,例如sys_execve这将失败,因为它们是由存根间接调用的.对于sys_execve,这是stub_execve(比较 LXR上的汇编代码).

但这些存根有什么用呢?为什么只有某些系统调用如execve(2)和fork(2)需要存根,这是如何连接到x86_64的?是否存在挂钩存根系统调用(在可装入内核模块中)的解决方法?

here开始,它说:

“Certain special system calls that need to save a complete full stack frame.”

而且我认为execve只是这些特殊系统调用之一.

stub_execve的代码,如果你想挂钩它,至少你可以尝试:(1)了解这些汇编代码的含义并自行完成,然后您可以在自己的汇编代码中调用自己的函数.(2)从汇编代码的中间,它有一个调用sys_execve,你可以将sys_execve的地址替换为你自己的钩子函数.

相关文章
相关标签/搜索