系统调用:由操作系统实现的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API),是应用程序同系统之间的接口。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序。

  系统调用接口的主要任务是把进程从用户态切换到内核态。在具有保护机制的计算机系 统中,用户必须通过软件中断或陷阱,才能使进程从用户态切换为内核态。 在i386体系中,Linux的系统调用接口是通过调用软中断指令“int  0x80”使进程从用户态进入内核态的,这个过程也叫做“陷入”。当系统调用接口调用软中断指令“int  0x80”时,这个指令会发生一个中断向量码为128的中断请求,并在中断响应过程中将进程由用户态切换为内核态。

  因为Linux只允许系统调用接口使用128这一个软中断向量,这也就意味着所有的系统调用接口必须共享这一个中断通道,并在同一个中断服务例程中调用不同的内核服务例程,所以,系统调用接口除了要引发“int 0x80”软中断之外,为了进人内核后能调用不同的内核服务例程,还要提供识别内核服务例程的参数,这个参数叫做“系统调用号”。也就是说,所有可为进程提供服务的内核服务例程都应具有一个唯一的系统调用号。

  几个概念:

  (1)系统调用号:用来标识一个系统调用用的,每个系统调用服务例程都有一个唯一的系统调用号;

  (2)系统调用表(sys_call_table):系统调用号与内核服务函数的对照表,根据系统调用号就可以找到相应的内核服务函数;

  系统调用过程:

    

简单来说:系统调用的过程概括为:整个系统调用的过程可以总结如下:
  1. 执行用户程序foo()
  2.调用系统调用foo(), 在foo()中调用“int 0x80”软中断陷入内核,此时把系统调用号传递到eax寄存器中,若有其他的函数参数,则传递到ebx,ecx,edx,esi,edi寄存器中。

  3. 进入内核态后,首先先通过系统调用号在系统调用表中查询系统调用服务函数

    system_call()函数通过将给定地 系统调用号来进行有效性检查,若不在范围内则返回错误,否则进行相应的系统调用:

      call *sys_call_table(,%eax,4)

      因为系统调用表的表项是32位的,座椅通过系统调用号*4,就能得到表中查询的位置即:系统调用例程的地址;

  4.在进行真正的系统调用服务函数之前还必须检查参数的正确性

      检查参数,力求合法有效还要正确实在检查指针的时候,要保证:

        指针指向的内存区域属于用户空间,进程不能哄骗内核去读内核空间的数据

        指针指向的内存区域在进程的地址空间中,进程决不能哄骗内核去读其他进程的数据

        如果是读,该内存应该 被标记为可读,写得话标记为可写,不能绕过访问权限的限制。

 5.检查完毕,进入系统调用例程,进行执行,执行完毕,返回相应的返回值

转载于:https://www.cnblogs.com/jyzz/p/3371770.html

谈谈linux系统调用相关推荐

  1. Linux存储保护,谈谈Linux中的存储保护

    谈谈Linux中的存储保护 以下讨论的内容是以i386平台为基础的 Linux将4G的地址划分为用户空间和内核空间两部分.在Linux内核的低版本中(2.0.X),通常0-3G为用户空间,3G-4G为 ...

  2. linux 系统调用 hook 总结

    1. 系统调用Hook简介 系统调用属于一种软中断机制(内中断陷阱),它有操作系统提供的功能入口(sys_call)以及CPU提供的硬件支持(int 3 trap)共同完成. 我们必须要明白,Hook ...

  3. Linux系统调用的实现机制分析

    [摘要]本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口有怎样的关系.然后,我们考察了内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递系统调用号和 ...

  4. linux系统调用挂钩方法总结

    相关学习资料 http://xiaonieblog.com/?post=121 http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing- ...

  5. 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    文章目录 一.内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二.Linux 内核架构层次 三.Linux 系统调用接口 一.内存管理架构组成 ( 用户空间 | 内核空间 | MM ...

  6. Linux系统调用FAQ

    1. Linux系统调用的作用? 系统调用是操作系统为用户态运行的进程与系统内核.硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口,在应用程序和硬件之间设置一个额外层的优点包括: 1.    ...

  7. 64位汇编之linux系统调用

    linux系统中64位汇编和32位汇编的系统调用主要有以下不同: (1)系统调用号不同.比如x86中sys_write是4,sys_exit是1:而x86_64中sys_write是1, sys_ex ...

  8. Linux系统调用及其效率

    操作系统相关概念: 操作系统---管理计算机硬件与软件资源的软件,是用户与系统操作交互的接口,为在它上面运行的程序提供服务. 操作系统内核 ----操作系统的核心.负责管理系统的进程.内核.设备驱动程 ...

  9. linux系统调用理解之摘录(3)

    Linux系统调用需要持续不断地深入理解,因此这里收集一些较好的博客,以便后续自己参考研究: (1)Linux 库函数与系统调用的关系与区别 https://www.cnblogs.com/liwei ...

最新文章

  1. DIV+CSS规范命名大全集合
  2. 内网PC通过NAT server公网地址访问内部服务器时TCP三次握手不成功
  3. visual studio 工具箱(选项卡、无控件、灰图标)
  4. JAVA String.format 方法使用介绍
  5. Navicat 提示 Access violation at address ***(771B7870) in module ‘ntdll.dll’. Read of address ***(220A
  6. 用Tableau制作10种漂亮的柱形图
  7. 在CentOS中安装gcc配置c语言开发环境(转)
  8. TDD容易被忽略的五大前提
  9. 菜鸟学Linux - 用户与用户组基础
  10. 用java写一些有趣的特效_[Java教程]用JavaScript模拟Flash效果写的炫光波动特效
  11. vba正则表达式入门
  12. sonar pmd\p3c插件源码初步解析
  13. 规范使用地图,从规范制图开始
  14. windows下安装sloth
  15. Global Mapper 将散点数据转为grd或者其他各种格式数据
  16. 四、Springboot 整合Shiro---02认证---记住我
  17. 视网膜正常oct图_POAG患者视网膜各层厚度的OCT分析
  18. 常用的计算机网络设备有,常用网络设备有哪些,初学者必须要知道的五大网络设备...
  19. UE4虚幻引擎开发手机游戏
  20. 遗传算法(Genetic Algorithm)从了解到实例运用(上)(python)

热门文章

  1. vuex中各属性的使用
  2. linux中fopen和open的区别,Linux下open与fopen的区别
  3. ctf wav文件头损坏_【CTF入门第二篇】南邮CTF web题目总结
  4. localhost访问容器mysql失败_Docker - Spring Boot应用程序 - 无法访问localhost上的MySql服务器...
  5. 原生ajax的post方法,原生js实现ajax及get post方法
  6. 如何区分两列中不同数据_如何区分原装数据线和山寨数据线
  7. 暮色森林模组_《我的世界》暮色森林VS天启之境 到底谁才是冒险模组一哥
  8. 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字
  9. mysql in union all_MySQL中使用or、in与union all在查询命令下的效率对比_MySQL
  10. linux c 文件映射,linuxc-共享内存