Linux内核分析(第四周)
扒开系统调用的三层皮(上)
一、用户态.内核态.中断
(上周课件有学习到)
1、地址空间是一个显著的标志(是逻辑地址,不是物理地址)
2、CPU每条指令的读取都是通过cs:eip这两个寄存器;0xc00000000以上的地址空间只能用内核态访问
3、中断处理是从用户态进入内核态的主要方式(系统调用是特殊的中断)
4、保护用户态的寄存器上下文(用户栈顶地址、当时的状态字、当时cs:eip的值)
5、中断第一步:保存现场(push) 最后一步:恢复现场(pop)
二、系统调用概述
1、系统调用的意义
1.操作系统为用户态进程与硬件设备进行交互提供了一组接口——系统调用:把用户从底层的硬件编程中释放出来;极大的提高了系统的安全性;使用户程序具有可移植性
2.API和系统调用
应用编程接口(API)和系统调用是不同的:API只是一个函数定义,而系统调用会通过软中断向内核发出一个明确的请求
3.Libc库定义的一些API引用了封装例程,唯一的目的就是发布系统
一般每个系统调用对应一个封装例程
库再用这些封装例程定义出用户的API
*不是每个API都对应一个特定的系统调用(API可能直接提供用户态的服务);也可能调用几个系统调用;不同的API可能调用同一个系统调用
*返回值:大部分封装例程返回一个整数(其含义依赖于相应的系统调用);-1在多数情况下表示内核不能满足进程的请求;Libc定义的errno变量包含特定的出错码
2、系统调用程序及服务例程
1.在linux中通过执行int $0x80来执行系统调用
2.传参:进程必须指明需要哪个系统调用,这需要传递一个名为系统调用号的参数(使用eax寄存器)
3、参数传递
1.系统调用也需要输入输出参数;
2.system_call是linux中所有系统的调用的入口点,每个系统调用至少有一个参数,即为用eax传递的系统调用号
4、系统调用的内核代码
1.系统调用分派表(dispatch table)存放在sys_call_table数组
5、系统调用的机制初始化
(了解代码)
6.系统调用的三层皮
xyz()
system_call()
sys_xyz()
7.中断向量0x80与system_call绑定起来;系统调用号将xyz和system_xyz()关联起来
三、使用库函数API和C代码嵌入汇编
实验: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
要用到getuid()和getgid()需要用到《unistd》头文件
1.C语言汇编
嵌入汇编
调用了24号和47号;
系统调用的进入办法只有两种 一种是int $0x80,一种是sysenter;
Linux内核分析(第四周)的更多相关文章
- LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”
LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...
- 20135327郭皓--Linux内核分析第四周 扒开系统调用的三层皮(上)
Linux内核分析第四周 扒开系统调用的三层皮(上) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/U ...
- linux内核分析第四周学习笔记
linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- LINUX内核分析第四周——扒开系统调用的三层皮
LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Linux内核分析第四周学习总结——系统调用的工作机制
Linux内核分析第四周学习总结--系统调用的工作机制 内核态 执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级. 用户态 执行级别低,只能访问0x0000 ...
- Linux内核分析第四周学习总结:扒开系统调用的三层皮(上)
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核 ...
- LINUX内核分析第四周学习总结——扒开应用系统的三层皮(上)【转】
转自:http://www.cnblogs.com/lalacindy/p/5276874.html 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://moo ...
- Linux内核分析第四周学习总结
朱国庆+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 扒开系统调用的三层皮 ...
- linux内核分析 第四周
一.系统调用的三层皮 内核态.用户态 Intel x86 CPU有四个权限分级,0-3.Linux只取两种,0是内核态,3是用户态. 0xc0000000以上的空间只能在内核态下访问 0x000000 ...
- 20135320赵瀚青LINUX内核分析第四周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周的内容主要是讲解系 ...
随机推荐
- 抓取js动态生成的数据分析案例
需求:爬取https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.html页面中的 ...
- 13.3SolrCloud集群使用手册之Zookeeper指令
转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.upconfig java -classpath .:/home/solr/cloud/lib/* org ...
- Oracle物化视图的创建及使用(一
Oracle物化视图的创建及使用 http://blog.csdn.net/tegwy/article/details/8935058 先看简单创建语句: create materialized ...
- Thinkpad T420 调节声音进度条显示
重装了系统,进度条没了. 1.安装热键驱动:http://think.lenovo.com.cn/support/driver/driversdownlist.aspx?yt=pt&categ ...
- 【转】 最新版chrome谷歌浏览器Ajax跨域调试问题
Ajax本身是不支持跨域的,而我们在开发工作中,可能会遇到本地开发环境未配置相关代码,需要到其他服务器上获取数据的情况,尤其在用HTML5开发app的过程中,前后台完全分离,使用Ajax进行数据交互, ...
- 页面中php传值后循环列表js获取点击的id
页面中php传值后循环列表js获取点击的id值进行js操作 <script type="text/javascript" src="__PUBLIC__/js/jq ...
- OpenCV——使用多边形包围轮廓
- JAVA框架 Spring 注解注入
一.首先需要引入jar包:spring-aop-4.2.4.RELEASE.jar.(在spring解压包libs内). 二.如果注解方式注入依赖的对象,需要引用新的约束. 内的:xsd-config ...
- java基础设计模式1——单例模式
概念:在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为. 单例模式从实现上可以分为饿汉式单例和懒汉式单例两种,前者天生 ...
- GitHub上最火的74个Android开源项目(三)
此前,推出的GitHub平台上“最受欢迎的开源项目”系列文章引发了许多读者的热议,在“GitHub上最火的40个Android开源项目(一).(二)中,我们也相继盘点了40个GitHub上最受欢迎的A ...