我试图在linux 2.6.32.60 x86内核中实现一个功能,允许我根据在任务结构中添加的字段阻止所有系统调用。这个功能基本上是这样的。
task_struct ts;
if(ts-> added_field == 0)
//do system call normally
else
//don't do system call
我想知道我是否应该直接在 entry_32. S里做这些事情 或者我是否可以修改syscall表在其他地方的调用方式. 直接修改 entry_32.S 的问题是,我不知道能否访问正在进行调用的任务结构。
谢谢大家的帮助!
如果我要这样做,我会把它挂到 __kernel_vsyscall()
并且如果按照你上面的逻辑,任务结构如此表示,就停止派遣。
具体来说。arch/i386/kernel/vsyscall-sysenter.S
是每个进程共享的地址空间,是所有系统调用的入口。在实际的系统调用发出之前,这个地方是我认为应该放钩子的地方。 你在进程的地址空间中,所以你应该可以访问 mm->current
的任务结构。 (另见 arch/sh/kernel/vsyscall/vsyscall.c
)