【问题标题】:Syscall implementation in glibcglibc 中的系统调用实现
【发布时间】:2016-01-18 04:06:28
【问题描述】:

我目前正在尝试通过 C 中的内联汇编器在我的 Linux X64 上完成系统调用。由于我的方法都不起作用,我想弄清楚这是如何在 glibc 中完成的。我在 /misc/syscall.c 中发现以下内容

long int
syscall (callno)
     long int callno;
{
  __set_errno (ENOSYS);
  return -1;
}

我不得不说我是 C 新手(我是一名 Java 开发人员),所以我不明白这里的语法。

我的问题如下:

  1. 我可以在括号中的参数列表之后写函数参数的声明是否正确:

    void foo(bar) 长条形; { //功能代码 }

  2. 如何在 glibc 的系统调用的汇编程序中找到实际实现? (不需要是正确的位置,任何提示表示赞赏)

【问题讨论】:

标签: c linux system-calls glibc libc


【解决方案1】:

系统调用不仅仅由 glibc 在源代码中定义。 Glibc 通过这个 shell 脚本为系统调用创建语法:/sysdeps/unix/make-syscalls.sh。该脚本使用适用于相关操作系统的 syscalls.list 文件。此外,还有一些关于架构的文件可以确定正确的操作码以捕获内核。例如。 X86_64 将“syscall”定义为跳转到内核的操作码(参见the sysdep.h for X86_64)。

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2015-03-14
    • 2012-08-22
    • 1970-01-01
    • 2018-04-04
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    相关资源
    最近更新 更多