调用堆栈中的C兄弟调用消除

时间:2014-11-11 15:23:23

标签: c linux linux-kernel kernel-module

我的任务是拦截从某个目录调用的特定系统调用。对于这些系统调用中的每一个,我都有我的实现,看起来像这样

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的答案中理解,可以完成尾调用或兄弟调用优化,所以现在它有了不同的问题。

0 个答案:

没有答案