我知道系统调用不在C 标准库中。是否有系统调用所在的库(某种系统库)?
如果有这样的库,这个库如何链接到可执行程序?
A 系统调用可以以几种不同的方式工作,具体取决于目标架构,但无论如何,它是not图书馆的电话。它是正在运行的用户空间程序调用内核中某些功能的一种方式。
在非常旧的系统中,这通常意味着直接跳转到该内核函数开始的某个地址。后来,内核引入了“跳转表”,添加了一个间接层,因此当内核更改时,地址不必更改。这种简单的方法在很长一段时间内不再起作用(Linux从未使用过它),因为现在,用户空间程序运行在某种“受保护”模式下,这限制了它们可以做的事情并让它们在虚拟地址空间中运行,因此保护系统不因某个用户空间程序错误而崩溃。
因此需要新的方法将 CPU 置于允许的模式any代码(特权模式),并仍然确保控制仅传递给内核,因此其他代码不会意外地在特权模式下运行。在x86
,这通常是使用int
触发软中断的指令,内核处理该中断。在amd64
,有一个特殊的syscall
进入内核的指令。
In any在这种情况下,C 不知道系统调用。你不能直接在 C 中发出系统调用(但你可以使用内联组装,如果您知道您的目标架构)。 Linux 上的 C 库包含许多函数,这些函数只是实际系统调用的微小包装器,因此您可以直接从 C 中使用它们。
虽然不在问题范围内:Contrary to Linux, Windowshides系统调用的程度甚至没有记录在案,并且随时可能更改。在 Windows 上,你应该only使用系统库(例如user32.dll
)为您的应用软件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)