0

有没有办法检索在 syscall() 中进行的系统调用的名称?我看到我们可以访问该号码;我可以以某种方式使用它吗?

4

1 回答 1

5

如果你想要一个字符串,你必须保存一个系统调用名称数组。你可以这样syscall.csyscalls[]

static char* syscallnames[] = {
[SYS_fork]    "fork",
[SYS_exit]    "exit",
[SYS_wait]    "wait",
...
};

syscall()像这样使用它:

void
syscall(void)
{
  int num;

  num = proc->tf->eax;
  if(num > 0 && num < NELEM(syscalls) && syscalls[num]) {
    cprintf("calling sys call: %s", syscallnames[num]); // <<< code addition
    proc->tf->eax = syscalls[num]();
  } else {
    cprintf("%d %s: unknown sys call %d\n",
            proc->pid, proc->name, num);
    proc->tf->eax = -1;
  }
}
于 2015-04-27T10:32:20.157 回答