《Linux内核分析》第四周学习总结 扒开系统调用的三成皮(上)
第四周 扒开系统调用的三层皮(上)
郝智宇 无转载 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
一、用户态、内核态和中断处理过程
1.我们与系统调用打交道是通过库函数的方式
2.一般现代CPU都有几种不同的指令执行级别
因为如果所有程序员写的代码都可以有特权指令的话,系统就会很容易崩溃。

3.中断处理是从用户态进入内核态主要的方式
从用户态切换到内核态时,,必须保存用户态的寄存器上下文
中断/int指令会在堆栈上保存一些寄存器的值
4.系统调用只是一种特殊的中断
5.中断发生后第一件事就是保存现场
6.中断处理结束前最后一件事就是恢复现场

二、系统调用概述和系统调用的三层皮
1.系统调用的意义:
操作系统为用户态进程与硬件设备进行交互提供了一组接口——系统调用:
把用户从底层的硬件编程中解放出来;极大的提高了系统的安全性;使用户程序具有可移植性。
2.API和系统调用:
(1)API:应用程序编程接口
(2)一般每个系统调用对应一个封装例程,库再用这些封装例程定义出给用户的API。
3.系统调用的三层皮:
xyz,sysytem_call和sysytem_xyz
(1)中断向量0x80与system_call绑定起来
(2)系统调用号将xyz与sys_xyz关联起来了(使用eax)
三、使用库函数API和C代码中嵌入汇编代码触发同一个系统调用
1.使用库函数API获取系统当前时间
2.C代码中嵌入汇编代码的写法:
_asm_(
汇编语句模板:
输出部分:
输入部分:
破坏描述部分);
3.使用C代码中嵌入汇编代码触发系统调用获取系统当前时间

任务
(我选择的是2号系统调用fork)
使用库函数API:

编译运行结果:

内嵌汇编:

编译运行结果:

总结:系统调用的工作机制
诸多系统调用可以看作按照序号排好顺序的黑箱,知道了一个系统调用的号,按照其API或者汇编格式的调用方法,
就可以使用这个黑箱的功能,完成一定的任务。而黑箱的内容正是系统给我们提供的服务,帮我们从硬件操作中抽
离出来,提高系统的安全性。
《Linux内核分析》第四周学习总结 扒开系统调用的三成皮(上)的更多相关文章
- LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”
LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...
- LINUX内核分析第四周学习总结——扒开应用系统的三层皮(上)【转】
转自:http://www.cnblogs.com/lalacindy/p/5276874.html 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://moo ...
- linux内核分析第四周学习笔记
linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第四周学习总结——系统调用的工作机制
Linux内核分析第四周学习总结--系统调用的工作机制 内核态 执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级. 用户态 执行级别低,只能访问0x0000 ...
- 《Linux内核分析》 第四节 扒开系统调用的三层皮(上)
<Linux内核分析> 第四节 扒开系统调用的三层皮(上) 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com ...
- 《Linux内核分析》 第五节 扒开系统调用的三层皮(下)
<Linux内核分析> 第五节 扒开系统调用的三层皮(下) 20135307 一.给MenusOS增加time和time-asm命令 给MenuOS增加time和time-asm命令需要 ...
- Linux内核分析第四周学习总结:扒开系统调用的三层皮(上)
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核 ...
- Linux内核分析第四周学习总结
朱国庆+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 扒开系统调用的三层皮 ...
- 20135320赵瀚青LINUX内核分析第四周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周的内容主要是讲解系 ...
随机推荐
- Chrome 打印PDF技巧
Chrome 打印PDF技巧 原文地址:https://github.com/zhongxia245/blog/issues/22 欢迎star 本教程,使用Mac电脑进行演示. 常规的Chrome打 ...
- Django商城项目笔记No.15用户部分-用户中心邮箱验证
首先增加前端页面success_verify_email.html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- selenium3 浏览器驱动下载及验证
下载浏览器驱动 当selenium升级到3.0之后,对不同的浏览器驱动进行了规范.如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动. 各浏览器下载地址: Firefox浏 ...
- 部署weblogic遇到的问题总结
myeclipse开发的项目,运行在tomcat7上完全正常.部署到weblogic10上就出现了问题,现把问题记录一下: 1.找不到javax/servlet/jsp/jstl/core/Condi ...
- 当我们跑SparkSQL时候为了更好地了解SparkSQL运行,可以WEBUI看SQL的Tab
- 关于Maven配置的一些标签含义(后续逐渐补充)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Scala学习之路 (五)Scala的关键字Lazy
Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载). 惰性变量只能是不可变变量,并且只有在调用惰性变量时,才会去实例化这个变量. 在Java中,要实现延迟加载(懒加载),需要自己手动 ...
- CSS居中布局
一:水平居中方案: 1.行内元素 设置 text-align:center 2.定宽块状元素 设置 左右 margin 值为 auto 3.不定宽块状元素 a:在元素外加入 table 标签(完整的, ...
- Python2.7-argparse
argparse模块,用于方便地编写用户友好的命令行接口,可以自动生成帮助信息,用法信息和错误处理 1.模块对象 1.1 ArgumentParser 对象 1.1.1 初始化构建类:Argument ...
- Android 使用正则表达式验证邮箱格式是否正确
/** * 验证邮箱格式是否正确 */ public boolean emailValidation(String email) { String regex = "\\w+([-+.]\\ ...