20135337朱荟潼 Linux第四周学习总结——扒开系统调用的三层皮(上)
朱荟潼 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课http://mooc.study.163.com/course/USTC 1000029000
知识点梳理
一、用户态、内核态和中断处理过程
1.级别、如何区分
2.中断处理,用户态到内核态
3.保护现场和恢复现场
二、系统调用概述
1.操作系统为用户态进程与硬件设备进行交互提供了一组接口——系统调用
1.把用户从底层硬件编程中解放;
2.提高系统安全性;
3.用户程序具有可移植性;
2.API(应用编程接口)和系统调用关系
1.API是函数定义;
2.系统调用时通过软中断向内核发出明确请求;
3.a.API可直接提供用户态服务(如:数学函数);b.一个API调用几个系统调用;c.不同API可调用同一个系统调用;
3.Libc库
1.定义了一些API引用了封装例程;
2.目的发布系统调用;
3.一般每个系统调用对应一个封装例程,库再用这些封装例程定义出给用户的API;
4.返回值
1.大多封装例程返回一个整数,其值依赖于相应的系统调用;
2.-1表示内核不能满足进程的请求;
3.Libc定义的errorno变量包含特定出错码;
5.处理应用程序、封装例程、系统及系统调用服务例程关系
三层皮:API xyz,中断向量system_call,中断服务程序sys_xyz
6.系统调用号将xyz和sys_xyz关联起来;用eax寄存器来传递参数;
7.系统调用的传递参数方法
1.实际的值;
2.用户态进程地址空间的变量的地址;
3.包含指向用户态函数的指针的数据结构的地址;
寄存器传递参数的限制
8.system_call是linux所以系统调用的入口
三、使用库函数API和C代码中嵌入汇编代码
1.C代码中嵌入汇编代码
详细见第二周学习总结 (http://www.cnblogs.com/zzzz5/p/5232145.html)
2.获取系统当前时间
asm volatile(
"mov $0,%%ebx\n\t" ;系统调用传递第一个参数使用ebx,把ebx清零
"mov $0xd,%%eax\n\t" ;time的系统调用号是13
"int $0x80\n\t"
"mov %%eax,$0\n\t" ;eax放入tt变量中,返回值
:"=m"(tt)
);
系统调用号如:
具体系统调用号参见:http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl
3.实践(11号——fork)
源代码fork.c
嵌入式汇编代码fork_asm.c
总结
1.API是一个函数概念,它可能会使用系统调用(系统调用是用户态程序操作硬件的接口)。每次系统调用都会向内核请求软中断,即执行int $0x80指令。
2.int 0x80该指令的作用是找到系统调用处理程序(中断处理程序)。
3.使用iret指令返回到用户态。
4.系统是通过中断的方式将用户态转换为内核态,并通过调用系统函数来实现系统功能。当系统中断出现时,CPU保护现场和上下文切换来保护目前用户态所运行的状态,并通过返回系统调用函数的值来让用户判断是否已经有效地调用,结果如何。
5.系统调用是一个软中断,中断号是0x80,它是上层应用程序与Linux系统内核进行交互通信的唯一接口。通过int 0x80,触发系统调用。
20135337朱荟潼 Linux第四周学习总结——扒开系统调用的三层皮(上)的更多相关文章
- #Linux第四周学习总结——扒开系统调用的三层皮(上)
Linux第四周学习总结--扒开系统调用的三层皮(上) 一.用户态.内核态和中断 系统调用通过库函数. 1.用户态和内核态 区分(不同的指令执行级别): 用户态:在相应的低执行状态下,代码的掌控范围受 ...
- LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”
LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...
- 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...
- 20135337朱荟潼 Linux第二周学习总结——操作系统是如何工作的
一.计算机是如何工作的--总结 三个法宝 存储程序计算机.函数调用堆栈.中断机制 二.堆栈 1.是c语言程序运行时必须的一个记录调用路径和参数的空间. 函数调用框架.传递参数.保存返回地址.提供局部变 ...
- LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)
LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...
- Linux第五周学习总结——扒开系统调用的三层皮(下
Linux第五周学习总结--扒开系统调用的三层皮(下) 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- 2013337朱荟潼 Linux第五章读书笔记——系统调用
摘要: [20135337朱荟潼]原创作品转载请注明出处 第五章 系统调用 5.1 与内核通信 中间层 作用三个:1.为用户空间提供一种硬件的抽象接口:2.保证系统稳定和安全:3.除异常和陷入,是内核 ...
- 《Linux内核分析》第五周学习总结 扒开系统调用的三层皮(下)
扒开系统调用的三层皮(下) 郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给Men ...
- linux 内核 第四周 扒开系统调用的三层皮 上
姬梦馨 原创作品 http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 用户通过库函数与系统调用联系起来:库函数帮我们把系 ...
随机推荐
- vue2.0学习笔记之路由(二)路由嵌套+动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于 X509Certificate2 找到文件路径的问题
由于微信退款功能需要用到证书,当调用 X509Certificate2 的时候,会提示找不到文件而报错. X509Certificate2 cert = new X509Certificate2(文件 ...
- luogu P3690 【模板】Link Cut Tree (动态树)
嘟嘟嘟 LCT竟然看了整整一天,但好歹是看懂了. 教程这里不写,强烈推荐 闪狐大佬的博客 . 但是还是有几句想说的. 1.尽管LCT和splay很像,但是有一些细节还是不一样的.首先是rotate,我 ...
- Maven 安装源码和文档到本地仓库
一: 1: mvn source:jar 生成源码的jar包 2: mvn source:jar install 将源码安装到本地仓库 ,可以直接mvn source:jar install 一部 ...
- php 把一个一维数组的值依次赋值到二维数组中的每一项
Array( [0] => 1 [1] => 4 [2] => 2 [3] => 6 ) Array( [0] => Array ( [field_name] => ...
- 20165302 程上杰 Exp1 PC平台逆向破解
实验内容 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 注入一个自己制作的she ...
- Python2.7-marshal
marshal模块,和 pickle 模块功能基本相同,也是序列化数据,只不过 marshal 都序列化成二进制数据,由于没有官方统一,不同版本 marshal 的结果也会不一样,所以不推荐使用.ma ...
- 声明式API replica controller vs replica set 对比
1.在命令式API中,你可以直接发出服务器要执行的命令,例如: “运行容器”.“停止容器”等. 在声明性API中,你声明系统要执行的操作,系统将不断向该状态驱动. 可以想象成手动驾驶和自动驾驶系统.( ...
- ORACLE SEQUENCE 具体解释
1. About Sequences(关于序列) 序列是数据库对象一种. 多个用户能够通过序列生成连续的数字以此来实现主键字段的自己主动.唯一增长,而且一个序列可为多列.多表同一时候使用. 序列 ...
- 使用BAPI批量修改采购信息记录的税率
业务方面提出需求:由于国家税率从5月份开始16%更改为13%.要求开发一个批量修改采购信息记录税率的功能. 税代码就是税率,J2代表13% 这个需求在ME13里面就可以单个修改,所以可以用BDC,但后 ...