Linux内核分析第四周学习总结——系统调用的工作机制
2016-03-18 14:44
483 查看
Linux内核分析第四周学习总结——系统调用的工作机制
内核态
执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级。用户态
执行级别低,只能访问0x00000000-0xbfffffff之间的逻辑地址,权限分级为3级。区分与切换
CS:eip(代码段选择寄存器/偏移量寄存器)中,CS寄存器最低两位表示特权级。状态通过中断来切换,包括硬件中断和系统调用两种方式。寄存器上下文
从用户态切换到内核态时,int指令会保存用户态的寄存器上下文到内核堆栈中,同时会把当前内核态的一些信息加载,例如cs:eip指向中断处理程序入口。 用户态栈顶地址
当时状态字
当时cs:eip
系统调用三层皮(以API xyz为例)
API xyz 中断向量system_call
中断服务程序sys_xyz
系统调用号通过eax寄存器传递,将API xyz和中断服务程序sys_xyz关联起来。
Linux也可以通过int $128来执行系统调用
实验过程:
选用第2号调用fork1.使用库函数API()
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/25/4ecb2ade2226526a1e8db6fa0efc5ef5.png)
2.内嵌汇编
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/25/5ab160451b94deb97fd07a0173c105c7.png)
原理分析:通过将调用号$0x2传入寄存器%eax,然后使用int指令执行系统调用。
运行结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/25/a6499905f170a1f69c72094892e2d167.png)
总结:
对于系统调用的工作机制,我觉得我们可以将诸多系统调用视作按照序号排好顺序的黑箱,只要知道了一个系统调用的号,按照其API或者汇编格式的调用方法,我们就可以使用这个黑箱的功能,完成一定的任务,而黑箱的内容正是系统给我们提供的服务,帮我们从硬件操作中抽离出来,提高系统的安全性。zl + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
相关文章推荐
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例
- 查看 SELinux状态及关闭SELinux
- linux 中软连接和硬链接
- linux常用命令总结
- Centos linux安装MySQL-5.6.4
- centos系统安装中文字体几种方法
- Linux环境下调试C程序
- linux下挂载移动硬盘
- Lesson 6 SDL扩展库的使用和加载其他格式的图片
- linux 运行级别与chkconfig
- u-boot向linux内核传递启动参数(详细)
- Linux文件夹分析
- Linux之getopt
- Linux查看与修改时区、时间的命令
- 升级CentOS自带的JDK
- ARM Linux 3.x的设备树(Device Tree)
- linux awk命令详解
- Linux下FTP服务器的搭建
- 诡异的解决了诡异的错误---Win10+Kali linux 2.0 双系统 以及 grub 修复(上)
- Linux软连接和硬链接