【问题标题】:Where are the OSX (XNU) syscalls actually documented?OSX (XNU) 系统调用实际记录在哪里?
【发布时间】:2019-04-06 00:25:37
【问题描述】:

我在这里查看syscalls.master 文件,但它根本没有记录。系统调用的文档是否存在?如果没有,为什么不呢?

我所说的文档是指对每个系统调用的作用以及它所采用的参数的含义的实际解释。

【问题讨论】:

  • 从 OS/X 命令行你应该可以做到man 2 functionname 其中functionname 是系统调用函数。你也可以在这里查看函数:freebsd.org/cgi/man.cgi
  • 除汇编标签外请注明是哪个指令集。
  • @old_timer XNU 不使用单个指令集吗?我用 XNU 标记了这个
  • @ubadub:根据en.wikipedia.org/wiki/XNU#Kernel_design,它曾经运行在PowerPC上,2007年运行在ARM和x86上。 (在 x86 上,IA-32 和 x86-64)。我根据您的评论为您标记了它。
  • @PeterCordes 谢谢!

标签: macos assembly x86-64 system-calls xnu


【解决方案1】:

Apple 的立场是系统库是 API 和稳定的 ABI,系统调用不是。它们不鼓励直接使用,因为它们可能会随着操作系统的发布而变化。

因此,您将看到的最佳文档是第 2 节中的手册页,或者在某些情况下是 /usr/include 中的标题。当然,您也可以查看系统调用实现的 XNU 源代码,了解它们是如何工作的。

请注意,syscalls.master 中的许多系统调用仅供内部使用,没有文档。此外,syscalls.master 仅包含 Unix 系统调用,而不包含例如 Mach 系统调用。

【讨论】:

  • 如何从程序集(x86-64)调用API/stable API?
  • @ubadub:我假设它就像任何其他 Unix 系统:与 libc 链接并在其中调用系统调用包装函数。例如mov edi,1 / lea rsi, [rel msg] / mov edx, msglen / call write 使用 x86-64 System V 调用约定调用 POSIX write 系统调用 (man7.org/linux/man-pages/man3/write.3p.html)。
  • 是的,或多或少。与调用任何外部函数的方式相同。不过,您可以在函数名称前加上下划线(例如 _write)。一个有用的技术是编写一个 C 文件来执行您感兴趣的操作,将其编译为程序集(例如 cc -S -o foo.s foo.c),然后读取该程序集以查看它是如何完成的。此外,在 macOS 上,C 库位于 libSystem 中,尽管 libc 是它的别名。
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
相关资源
最近更新 更多