我的任务是拦截从某个目录调用的特定系统调用。对于这些系统调用中的每一个,我都有我的实现,看起来像这样
int my_syscall(args) {
struct task_struct * cur_task = current;
if(check_dir(cur_task)) {
do_smth;
n = orig_sys_call(args);
do_smth;
return n;
}
else {
return orig_sys_call(args);
}
}
问题是 - 是否有可能以某种方式更改else
部分(return orig_sys_call(args)
),以便在执行orig_sys_call(args)
之后它将直接返回到函数调用者而不是返回到我的执行?
我想知道我可以使用语言工具,而不是编译器优化。我从前面的问题GCC Return optimiztion的答案中理解,可以完成尾调用或兄弟调用优化,所以现在它有了不同的问题。