【问题标题】:looking for a detailed document on Linux System calls [closed]寻找有关 Linux 系统调用的详细文档 [关闭]
【发布时间】:2012-03-30 09:33:23
【问题描述】:

我想为 x86 Linux 编写自己的 libc 库以用于学习目的。为此,我需要用汇编级语言调用 Linux 系统调用。我知道如何在 Linux 的程序集中进行系统调用。但是,我需要了解有关 Linux 系统调用的完整信息。

我正在寻找有关 Linux 系统调用的详细文档,例如每个系统调用的输入和输出。任何人都可以为我提供 Linux 系统调用的 URL/PDF。

例如,对于“sys_socketcall”调用,寄存器 AX = 102,BX 应包含 create/bind 等方法的调用号,CX 应包含指向“unsigned long”的指针。在这里,我需要更多关于第三个参数(CX)的信息。

【问题讨论】:

标签: c linux assembly system-calls


【解决方案1】:

令人惊讶的是,关于 linux 内核的最佳信息来源是它的来源:https://github.com/torvalds/linux/blob/master/include/linux/syscalls.h 应该包含所需的调用定义。

调用本身的来源:http://lxr.free-electrons.com/source/net/socket.c#L2366,这里可以看到参数是如何处理的。

要快速grep网上的linux源码,可以使用LXR:http://lxr.free-electrons.com/ident?i=sys_socketcall

【讨论】:

  • 谢谢,我仍然不确定“long sys_socket(int, int, int);”中的每个输入API。通过Linux代码分析,我可以理解这里每个输入的含义。但是,这需要时间,我可能误解了一些东西。所以我正在寻找有关 Linux 系统调用的详细信息。
  • 简而言之,调用可能有不同数量的参数,具体取决于call 参数值。而如果你真的想重新实现libc进行学习,你最好选择ARM这样的现代平台,找到可以运行在8086上的内核版本本身就是一个问题。
  • 查看第 2349 行,它包含一个参数计数数组,取决于 call 值(存储在 BX 寄存器中)。
  • 是的,参数计数取决于调用值。查找每个参数的文档。
  • 我想应该有一个文档供标准库实现者或系统程序员详细描述每个系统调用。
【解决方案2】:

socketcall 系统调用是一种特殊情况,所以不要依赖这个来学习一般格式。此外,它只存在于 x86-32 上,其他平台对套接字操作的每个函数/过程使用单独的系统调用(在这些平台上,没有socketcall,但有socketbind 等等)。

对于 socketcall 的特殊情况:它需要 eax 中的 __NR_socketcallebx 中的子功能(例如 SYS_SOCKETSYS_BIND 等)编号以及另一个的地址ecx 中的参数。例如,您将必须存储一个数组,用于套接字操作(创建套接字)的 3 个单词,将族存储在 my_array[0] 中,将类型存储在 my_array[1] 中,并将协议(通常为 0)存储在 my_array[2] 中, 将 my_array 的地址传递给ecx (您不会以任何显式方式传递my_array 中的元素数量,这是您调用的套接字子函数所暗示的)。

您可能会喜欢这些文档:

现在,对于不是socketcall异常的其他系统调用,您只需要获取相应POSIX函数的引用(参见reference),或者从man(2)获取函数的相应描述(man(2) 是手册页的一部分,专门用于系统调用),您可以在此处找到示例:man-pages section 2。然后,您必须注意参数的顺序。您将传递eax 中的系统调用号,然后以man(2) 或POSIX 描述的相同顺序传递所有其他参数,依次传递给ebxecxedxesiediebp(最多六个参数)。状态/结果在eax 中返回。

请注意,以上内容仅适用于基于 Intel 架构的 Linux(您猜其他处理器也有其他寄存器),还请注意 x86-32 和 x86-64 之间的系统调用号不同。

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2020-01-16
    • 2014-07-24
    相关资源
    最近更新 更多