第四周 扒开系统调用的三层皮(上)

郝智宇 无转载 《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内核分析》第四周学习总结 扒开系统调用的三成皮(上)的更多相关文章

  1. LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”

    LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...

  2. LINUX内核分析第四周学习总结——扒开应用系统的三层皮(上)【转】

    转自:http://www.cnblogs.com/lalacindy/p/5276874.html 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://moo ...

  3. linux内核分析第四周学习笔记

    linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  4. Linux内核分析第四周学习总结——系统调用的工作机制

    Linux内核分析第四周学习总结--系统调用的工作机制 内核态 执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级. 用户态 执行级别低,只能访问0x0000 ...

  5. 《Linux内核分析》 第四节 扒开系统调用的三层皮(上)

    <Linux内核分析> 第四节 扒开系统调用的三层皮(上) 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com ...

  6. 《Linux内核分析》 第五节 扒开系统调用的三层皮(下)

    <Linux内核分析> 第五节 扒开系统调用的三层皮(下) 20135307 一.给MenusOS增加time和time-asm命令 给MenuOS增加time和time-asm命令需要 ...

  7. Linux内核分析第四周学习总结:扒开系统调用的三层皮(上)

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核 ...

  8. Linux内核分析第四周学习总结

    朱国庆+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 扒开系统调用的三层皮 ...

  9. 20135320赵瀚青LINUX内核分析第四周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周的内容主要是讲解系 ...

随机推荐

  1. SDN2017 第二次实验作业

    安装floodlight 参考链接:http://www.sdnlab.com/19189.html 从github下载源码,并编译安装 $ sudo apt-get install build-es ...

  2. Maven单独构建多模块项目中的单个模块

    Maven单独构建多模块项目中的单个模块   说明: 1.可能存在的场景,多模块项目没有互相引用,那么此时可以单独构建单个项目,指定到子模块的pom.xml文件即可完成编译. 2.如果多模块项目各自都 ...

  3. Android安全测试

  4. 利用Python爬取豆瓣电影

    目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ...

  5. WebAPI项目中使用SwaggerUI

    1.创建webapi项目解决方案 2.引入Swagger组件 在项目引用中可以看到swagger的引用 3.webapi 项目右键属性->生成-> 勾选XML文档文件,然后将XML文件保存 ...

  6. Kubernetes1.91(K8s)安装部署过程(六)--node节点部署

    hi,everybody,我回来了,之前安装到flannel之后,文章一直没有更新,甚至不少小伙伴都来加qq询问是否继续更新了, 这里说明下原因,我在部署1.91node的时候的确出现了各种各样的问题 ...

  7. python不要使用可变对象作为参数的默认值

    幽灵乘客例子: . 如上:如果为空时,bus2和bus3引用的是相同的一个list,就会造成粗错误 实际工作中,如果不想改变某个参数值,那么通过以上这种赋值也会改变 解决方式self.passenge ...

  8. JAVA框架 Spring 引入多个配置文件

    1.如果配置文件比较长,可以分多个配置文件.有两种方式: 1)在主配置文件加标签<import/> <import resource="jd/com/other/appli ...

  9. 输入5个学生的信息(包括学号,姓名,英语成绩,计算机语言成绩和数据库成绩), 统计各学生的总分,然后将学生信息和统计结果存入test.txt文件中

    题目分析: 1.首先想到的是数组存放数据,数组肯定是String类型. 2.String类型的数组,5行6列.要把从第0行第2列到第4行第4列的数据取出转换成数值型,再统计三科总分.最后把计算出的总分 ...

  10. mysqldump: Got error: 1356 mysqldump的重要参数--force

    一个MySQL的备份突然变小了很多,但实际的数据量却一直在增长.备份脚本也没有调整过.为什么呢? 重现了一下备份过程,发现备份中遇到了如下错误: mysqldump: Got error: 1356: ...