Linux系统调用权威指南.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux 系统调用权威指南 2016 年 4 月 5 日, • packagecloud (于朝阳 译) 标签:  linux  kernel  syscall  简介  什么是系统调用?  背景知识 o 硬件与软件 o 应用程序,内核与 CPU 特权级 o 中断 o 特殊模块寄存器 (MSRs) o 通过汇编语言来执行系统调用,这不是个好主意  传统系统调用 o 自己写汇编代码来执行系统调用 o 内核部分:int $0x80 调用入口 o 从系统调用中返回 iret  快速系统调用 o 32 位快速系统调用  sysenter/ sysexit  __kernel_vsyscall 解析  自己写汇编代码来执行 sysenter 系统调用  内核部分:sysenter 调用入口  sysexit 从系统调用 sysenter 中返回 o 64 位快速系统调用  syscall/ sysret  自己写汇编代码来执行 syscall 系统调用  内核部分:syscall 调用入口  sysret 从系统调用 syscall 中返回  半手动方式调用 syscall(2) o glibc syscall 封装解析  虚拟系统调用 o 内核vDSO o 在内存中定位 vDSO o glibc 中的vDSO  glibc 系统调用封装  与系统调用相关的有趣问题 o CVE-2010-3301 o 安卓 sysenter ABI 问题  结论  相关阅读 简介 这篇博文描述了 Linux 程序如何调用内核方法。 文中概述了几种不同的执行系统调用的方法,同时举例讲述了如何通过写汇编代码来执行 系统调用,以及系统调用的内核入口/出口,glibc 封装,代码错误,和其它相关信息。 什么是系统调用? 当一个应用程序调用如 open ,fork ,read ,write (或者很多其它类似方法)时, 就会用到系统调用。 系统调用就是应用程序进入内核中去完成某些任务的途径。应用程序通过系统调用来完成 一系列操作,比如:创过新进程,执行网络/文件 IO,等等。 在这个网页 man page for syscalls(2)里,可以找到所有系统调用的列表。应用程序可以 用几种不同的方法来完成系统调用,而具体的机器码则与 CPU 体系结构相关。 从应用程序开发人员的角度来看,我们大可不必关心系统调用是如何被执行的。因为我们 只需要引用合适的头文件,然后就像使用普通函数那样去调用库函数就可以了。 glibc 提供的封装代码可以让调用者不必去关心底层实现,这些封装代码会使用调用时 传入的参数来执行内核调用。 在详细解释系统调用如何执行之前,我们需要定义一些后文中出现的术语和观点。 背景知识 硬件和软件 在这篇文章中,我们有以下假设:  你用的是一个 32 位或 64 位的 Intel 或 AMD CPU 的系统。文中描述的理论对于使用其 它系统的人来说是基本相同,但是具体的代码都是以 32 位或 64 位 Intel/AMD CPU 为 例的。  你对 Linux 内核版本3.13.0 感兴趣。其它版本的代码可能是类似的,但是行号或者代 码组织方式,文件路径可能会有所不同。GitHub 上有 3.13.0 版本的内核代码可供参 考。  你对 glibc 或者基于 glibc 的其它libc 实现(比如 eglibc )感兴趣。 在这篇文章中,x86-64 指基于 x86 架构的 64 位 Intel/AMD CPU。 应用程序,内核与 CPU 特权级 应用程序(比如文本编辑器,终端程序,ssh 守护程序,等等)需要与 Linux 内核进行交 互,内核才能帮助这些应用程序完成某些应用程序自己不能做的一系 等列操作。 比如,一个应用程序需要完成某些 IO 操作( open ,read ,write

文档评论(0)

xina171127 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档