【问题标题】:How does a low-level OS API work? [duplicate]低级 OS API 是如何工作的? [复制]
【发布时间】:2017-01-03 00:38:59
【问题描述】:

我想知道 OS API 是如何工作的,因为我决定编写一个编译器。如果您在 C/C++ 中做某事,您可能会调用 API。它们在 C/C++ 中看起来非常好,但我对它们在汇编中的编译方式感到非常困惑。他们是发出中断、写入内存地址、写入寄存器然后发出中断(这就是 BIOS API 的工作原理,我不确定 OS API 是否这样工作)还是其他什么?

【问题讨论】:

  • 您的问题很遗憾地暗示了对低级编程的基本知识的严重缺乏。我建议您在考虑编写自己的编译器之前,先为自己准备一两本关于该主题的好书并了解这些主题。
  • 这里的一个相关术语是“调用约定”(关于函数参数如何传递,返回值如何返回,哪些寄存器被破坏,哪些没有)。更一般地说,ABI(类似于 API 但二进制)描述了事物在汇编中如何相互交互。 x86 tag wiki 有一些关于 ABI 是什么的很好的链接,以及 x86 / x86-64 上常用的官方规范的链接(包括像 Linux 系统调用 ABI 之类的东西,它与 Windows 不同的是稳定并且可以直接使用,没有通常的 glibc 包装器)
  • 这似乎是最相关的副本,尽管我知道您实际上对 Windows 感兴趣。另请参阅stackoverflow.com/questions/8335582/…,了解为什么调用约定是按原样设计的。另请参阅x86 Linux 32-bit assembly Hello World, with pure system calls (no libc) on SO docs
  • 错了,我对 Windows 不感兴趣。我有兴趣为我正在创建的操作系统提供 API

标签: assembly compiler-construction operating-system


【解决方案1】:

很抱歉回答了我自己的问题,但我找到了我要找的东西

显然 OS API(至少在 Windows 中)只是一个标准的 C 调用,这意味着如果我正在编写我的编译器,我需要实现自己的 API 系统。

来源:https://social.msdn.microsoft.com/Forums/en-US/61b11104-98c1-43aa-be19-91378561bab4/calling-win32-api-from-assembly-language?forum=netfxtoolsdev

【讨论】:

  • 回答自己的问题很好,也值得鼓励。
  • 好吧,我发现其他人为回答他们自己的问题而道歉,所以我认为我应该这样做
猜你喜欢
  • 2012-03-06
  • 2018-04-17
  • 2021-09-18
  • 2014-09-23
  • 2012-06-22
  • 1970-01-01
  • 2010-12-30
  • 2019-04-24
  • 1970-01-01
相关资源
最近更新 更多