Linux 上的哪个库中有系统调用,该库如何链接到包含系统调用的可执行目标文件?

2023-11-26

我知道系统调用不在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(使用前将#替换为@)

Linux 上的哪个库中有系统调用,该库如何链接到包含系统调用的可执行目标文件? 的相关文章

  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na

随机推荐

  • 将 awk 与列值条件结合使用

    我正在学习 awkAWK 编程语言我对其中一个例子有疑问 如果我想打印 3 如果 2 等于一个值 例如1 我正在使用这个运行良好的命令 awk 2 1 print 3
  • 从 angularjs 中的服务调用控制器函数

    我正在使用 socket io 在我的应用程序中启用聊天 并且我正在使用一项服务SocketService执行所有套接字操作 当消息到来时 我想从服务触发控制器的功能SocketService对 UI 进行一些更改 所以我想知道如何从服务访
  • 如何在 redux 操作(或操作中分配的其他回调)上下文中使用 jest 测试 `image.onload`

    我的问题是我正在尝试对一个函数进行单元测试 但不知道如何测试它的一部分 这是一个 React Redux 操作 执行以下操作 1 使用图像 url 检索 json 数据 2 将图像加载到 Image 实例中并将其大小分派给减速器 当使用 I
  • document.write 的替代品是什么?

    在教程中我学会了使用document write 现在我明白 许多人对此不以为然 我试过了print 但随后它实际上将其发送到打印机 那么我应该使用什么替代方案 为什么我不应该使用document write w3schools 和 MDN
  • JavaScript 中现有的 OCR 脚本 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我有一个 CMS 增强功能的想法 从图像 例如扫描文档 中提取文本信息 并且想知道是否已经有任何东西可以帮助我 基本上 我想知道是否有一个用 Jav
  • 当iframe的来源是javascript时浏览器会做什么

    当 iframe 的来源是 javascript as in 到底是怎么回事 src javascript 是什么意思告诉浏览器做什么 path src 有什么作用 谢谢 克里斯 它告诉浏览器显示执行空字符串文字的结果 因此 它只会显示一个
  • 如何在客户端检查 YouTube 上是否存在视频

    我在做验证我的Youtube网址文本字段 我需要检查一下 如果Youtubeurl不存在我应该抛出错误 我按照这个answer并创建了jsfiddle检查它 它适用于有效的 url 但不适用于无效的 url 我所看到的只是 404 错误ne
  • Objective-C 中的异步调用

    我正在尝试从网站 xml 获取数据 一切正常 但是 UIButton 一直处于按下状态 直到返回 xml 数据 因此如果互联网服务出现问题 则无法纠正 并且应用程序实际上无法使用 以下是通话内容 AppDelegate appDelegat
  • Android studio 1.5.1:找不到属性“vectorDrawables”

    我正在使用 Android Studio 1 5 1 Gradle 2 8 和我的项目最小 sdk 版本 14 目标 sdk 版本 23 所以 当我通过 Google 文档将 vectorDrawables 添加到配置时 添加了 Vecto
  • 如何在字符串集合中高效查找指定长度的相同子串?

    我有一个收藏S 通常包含 10 50 个长字符串 出于说明目的 假设每个字符串的长度范围在 1000 到 10000 个字符之间 我想找到指定长度的字符串k 通常在 5 到 20 的范围内 是每个字符串的子串S 显然 这可以使用一种简单的方
  • UIButton改变位置

    我在 IB 中设置了一个按钮 我设置了 IBOutlet 并链接到它的屏幕对象 有没有办法以编程方式更改按钮位置和 或大小 我知道您可以更改标题和某些内容 但我不知道如何更改其位置或大小 现在我想相应地改变它的位置 是否可以 如果是 请告诉
  • Javascript:找到字符串中最长的单词

    function longestWord string var str string split var longest 0 var word null for var i 0 i lt str length 1 i if longest
  • 如何从剔除绑定中获取 DOM 元素?

    我已经使用淘汰赛将 DOM 元素绑定到 viewModel 当我更改底层模型上的属性时 它会更改 DOM 一切正常 但是 有没有办法获取绑定的 DOM 元素 以便当底层模型从外部更新时我可以向其中添加一个类 我使用了自定义绑定 它使我可以访
  • 什么时候可以完全优化掉 volatile 变量?

    考虑这个代码示例 int main void volatile int a static volatile int b volatile int c c 20 static volatile int d d 30 volatile int
  • 无法在 android studio 中创建 AVD

    我是安卓新手 我刚刚安装了 Android Studio 并创建了一个默认项目 现在我正在尝试创建 AVD 但无法创建 确定按钮未启用 请帮忙 附截图 问题是你没有安装系统镜像 请检查下图 要启动 SDK 管理器 请单击 Android S
  • 如何整合 Flask 和 Scrapy?

    我正在使用 scrapy 来获取数据 我想使用 Flask Web 框架在网页中显示结果 但我不知道如何调用烧瓶应用程序中的蜘蛛 我尝试过使用CrawlerProcess呼叫我的蜘蛛 但我收到这样的错误 ValueError ValueEr
  • 我无法查看 Android 版 Firebase Crashlytics 的崩溃详细信息,并卡在“构建并运行您的应用程序”上

    我在完成 Firebase 设置后尝试设置 Firebase Crashlytics 崩溃已成功发送 我可以在 firebase 仪表板中看到它们 但是当我进入 crashlytics 查看崩溃详细信息时 我陷入了第 3 步 构建并运行您的
  • iTerm 2 不支持 .tmux.conf 中声明的键绑定

    我正在使用最新稳定版本的 iTerm2 2 0 和最新的 Homebrew 版本的 tmux 1 9a 不幸的是 我的键绑定声明于 tmux conf不能在 集成模式 下使用 iTerm2 tmux 组合 即当 iTerm2 接管 tmux
  • 使用 Apache POI 进行低内存写入/读取

    我正在尝试编写一个相当大的 XLSX 文件 4M 单元 但遇到一些内存问题 我无法使用 SXSSF 因为我还需要读取模板中的现有单元格 我可以做些什么来减少内存占用吗 也许将流读和流写结合起来 为了用低内存处理大数据 最好的也是我认为唯一的
  • Linux 上的哪个库中有系统调用,该库如何链接到包含系统调用的可执行目标文件?

    我知道系统调用不在C 标准库中 是否有系统调用所在的库 某种系统库 如果有这样的库 这个库如何链接到可执行程序 A 系统调用可以以几种不同的方式工作 具体取决于目标架构 但无论如何 它是not图书馆的电话 它是正在运行的用户空间程序调用内核