gpt4 book ai didi

c - 系统调用在 Linux 上的哪个库中?这个库如何链接到包含系统调用的可执行目标文件?

转载 作者:太空狗 更新时间:2023-10-29 11:07:11 24 4
gpt4 key购买 nike

我知道系统调用不在 C 标准库中。是否有系统调用所在的任何库(某种系统库)?

如果有这样一个库,这个库是如何链接到可执行程序的?

最佳答案

系统调用 可以以几种不同的方式工作,具体取决于目标架构,但无论如何,它不是库调用。它是运行中的用户空间程序调用内核中某些功能的一种方式。

在非常古老的系统中,这通常意味着直接跳转到该内核函数开始的某个地址。后来,内核引入了“跳转表”,添加了一个间接层,因此内核更改时地址不必更改。这种简单的方法在很长一段时间内不再有效(Linux 从未使用过它),因为如今,用户空间程序以某种“ protected ”模式运行,该模式限制了它们可以做什么并让它们在虚拟地址空间中运行,因此保护系统免于崩溃,仅仅因为一个用户空间程序是错误的。

因此需要新的方法将 CPU 置于允许任何 代码的模式(特权模式)并仍然确保控制仅传递给内核,因此其他代码不会意外地以特权模式运行模式。在 x86 上,这通常是使用触发软中断的 int 指令完成的,内核会处理该中断。在amd64上,有一个特殊的syscall指令用于进入内核。


任何情况下,C 不知道系统调用。您不能直接在 C 中发出系统调用(但您可以使用内联汇编,如果您知道您的目标体系结构)。 Linux 上的 C 库包含许多函数,它们只是实际系统调用的微小包装器,因此您可以直接从 C 中使用它们。


虽然不在问题的范围内:与 Linux 相反,Windows 隐藏 系统调用的程度甚至没有记录它们并且随时可能更改。在 Windows 上,您应该为您的应用程序软件使用系统库(如 user32.dll)。

关于c - 系统调用在 Linux 上的哪个库中?这个库如何链接到包含系统调用的可执行目标文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46646625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com