linux内核分析 第四周 扒开系统调用的三层皮(上)
一、用户态、内核态和中断处理过程
系统调用是用户通过库函数方式:库函数帮我们把系统调用封装起来。
内核态:高级别执行,可以使用特权指令,访问任意的物理地址。
用户态:低级别执行,代码范围受到限制。
CS寄存器的最低两位表明了当前代码的特权级。
在linux中,0xc0000000以上的地址空间只能在内核态下访问,0x00000000-0xbfffffff的地址空间两种状态下都可以使用。(逻辑地址)
二、中断处理是从用户态进入内核态主要的方式
从用户态进入内核态:必须保存用户态的寄存器上下文
中断/int指令在堆栈上保存寄存器的值:用户态/内核态栈顶地址(ss:esp)、状态字(eflags)、cs:eip值(内核态时指向中断服务程序入口)
系统调用是一种特殊的中断
中断发生后第一件事就是保存现场
中断处理结束前最后一件事是恢复现场
三、系统调用概述
1、系统调用的意义
操作系统为用户态进程与硬件设备进行交互提供了一组接口-系统调用
用户不管硬件编程
提高系统安全性
用户程序可移植
2、API和系统调用
API:应用编程接口,是一个函数定义
系统调用:通过软中断向内核发出明确请求
Libc库定义的一些API引用了封装例程(唯一目的就是发布系统调用)
一般每个系统调用对应一个封装例程
库用封装例程定义出给用户的API
不是每个API都对应一个特定的系统调用
API可直接提供用户态服务,如数学函数
一个API可调用几个系统调用
不同API可调用同一系统调用
3、返回值:
封装例程返回一个整数,含义依赖与相应系统调用
-1表示内核不能满足进程的要求
Libc定义的errno变量包含特定出错码
四、系统调用三层皮:
API(xyz)
中断向量(system_call)
中断服务程序(sys_xyz)
用户态进程调用系统调用时,CPU切换到内核态执行内核函数(Linux中通过执行int $128来执行系统调用,产生向量为128的编程异常)
五、传参:
进程指明需要哪个系统调用,传递系统调用号,使用eax传递
系统调用号将xyz与sys_xyz关联起来
system_call是linux中所有系统调用的入口点,每个系统调用至少有一个参数,即系统调用号。
寄存器传递参数的限制:
每个参数长度不能超过寄存器长度即32位
在系统调用号eax之外,个数不能超过6个
超过6的话:某个寄存器中存储指针,指针会指向一个内存空间,存储参数
系统调用传递第一个参数使用ebx。
六、实验
1.选择20号系统调用,getpid来获取当前进程的pid
2.实验内容:
使用库函数API方式:
使用C代码中嵌入汇编代码方式:
linux内核分析 第四周 扒开系统调用的三层皮(上)的更多相关文章
- 20135327郭皓--Linux内核分析第四周 扒开系统调用的三层皮(上)
Linux内核分析第四周 扒开系统调用的三层皮(上) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/U ...
- LINUX内核分析第四周——扒开系统调用的三层皮
LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Linux内核分析 笔记五 扒开系统调用的三层皮(下) ——by王玥
(一)给MenuOs增加time和time-asm命令 更新menu代码到最新版 在main函数中增加MenuConfig 增加对应的Ttime和TimeAsm函数 make rootfs (二)使用 ...
- linux 内核 第四周 扒开系统调用的三层皮 上
姬梦馨 原创作品 http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 用户通过库函数与系统调用联系起来:库函数帮我们把系 ...
- Linux内核及分析 第四周 扒开系统调用的三层皮(上)
实验过程 选择20号系统调用getpid(取得进程识别码) 在网上查询getpid函数的C语言代码以及其嵌入式汇编语句 C语言代码: #include <stdio.h> #include ...
- Linux内核设计第四周——扒开系统调用三层皮
Linux内核设计第四周 ——扒开系统调用三层皮 一.知识点总结 (一).系统调用基础知识 1.用户态和内核态 内核态:在高级别的状态下,代码可以执行特权指令,访问任意的物理地址: 用户态:在相应的低 ...
- 《Linux内核分析》第四周 扒开系统调用的“三层皮”
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK FOUR( ...
- Linux内核分析——第四周学习笔记20135308
第四周 扒开系统调用的“三层皮” 一.内核.用户态和中断 (一)如何区分用户态.内核态 1.一般现在的CPU有几种不同的指令执行级别 ①在高级别的状态下,代码可以执行特权指令,访问任意的物理地址,这种 ...
- LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”
LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...
随机推荐
- Unity学习笔记(1)
transform: transform是GameObject的一个默认的组件,其包含着该对象的几种属性,坐标(Position)以及旋转角度(Rotation)和尺寸(Scale). transfo ...
- PHP手动环境搭建之WAMP
第一步:安装apache程序 首先需要去Apache官网下载Apache2.4(http://httpd.apache.org/download.cgi),操作如下图所示: 下载完成后把它解压出来,然 ...
- TW实习日记:前三天
今天是2018年7月20号,周五.从周一开始实习到现在,终于想起来要写日记这种东西了,可以记录一下自己这一天所学所做所知也是蛮不错的.先简单总结一下自己的大学生活吧,算是多姿多彩,体验了很多东西.在大 ...
- 高可用Kubernetes集群-9. 部署kubelet
十一.部署kubelet 接下来两个章节是部署Kube-Node相关的服务,包含:kubelet,kube-proxy. 1. TLS bootstrap用户授权 # kubelet采用TLS Boo ...
- Linux内核学习笔记(3)-- 进程的创建和终结
一. 进程创建: Unix 下的进程创建很特别,与许多其他操作系统不同,它分两步操作来创建和执行进程: fork() 和 exec() .首先,fork() 通过拷贝当前进程创建一个子进程:然后,ex ...
- [CF1137]Museums Tour
link \(\text{Description:}\) 一个国家有 \(n\) 个城市,\(m\) 条有向道路组成.在这个国家一个星期有 \(d\) 天,每个城市有一个博物馆. 有个旅行团在城市 \ ...
- 市场营销的4c原则
市场营销的4c原则随着市场竞争日趋激烈,媒介传播速度越来越快,4Ps理论越来越受到挑战.到80年代,美国劳特朋针对4P存在的问题提出了4Cs营销理论: 4C分别指代Customer(顾客).Cost( ...
- ES6的新特性(18)——async 函数
async 函数 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Generato ...
- ES6的新特性(7)——函数的扩展
函数的扩展 函数参数的默认值 基本用法 ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console ...
- Thunder团队——选题展示
团队名称:Thunder 组长:王航 成员:李传康.代秋彤.邹双黛.苗威.宋雨.胡佑蓉.杨梓瑞 项目名称:爱阅app 视频展示: http://www.cnblogs.com/lick468/p/76 ...