linux及安全第四周总结
学习内容:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
一、用户态、内核态
权限分级——为了系统本身更稳定,使系统不宜崩溃。(并不是所有程序员缩写的代码都很健壮!!)
x86 CPU四种不同的执行级别:0(内核态)—3(用户态)
区分方法:CS:EIP(CPU的每条指令都是通过这里执行)(代码段选择寄存器:偏移量寄存器)
CS寄存器的最低两位表明了代码级别——逻辑地址(不是物理地址)
内核态:可以访问4G地址空间的任意地址 用户态:0x00000000—0xbfffffff空间内的地址
二、中断——从用户态进入内核态
系统调用是一种特殊的中断(用户态进程与硬件设备的接口)
切换时就会涉及到上下文的问题?
即中断int指令在堆栈上会保存一些值:1.用户态栈顶地址 2.当时状态字 3.当时CS:EIP的值
save—cs:eip ss:eip eflag
load—cs:eip ss:eip
过程:1.SAVE_ALL——保存现场
判断是否有进程调度?
(无进程调度)last.RESTORE_ALL+iret(popl cs:eip/ss:eip/efalg)
(有进程调度)last.暂时保存当前的值直到该进程再次被调度
三、API——应用程序编程接口(不同于系统调用)
- API是一个函数定义
- 系统调用请求一个软中断
- 触发系统调用通过传递系统调用号实现(压栈传递参数)
(一)使用库函数API获取系统当前时间
代码:

运行结果:

(二) 使用嵌入式汇编代码获取系统当前时间
代码如下:

运行结果:

用户态向内核态传递了一个系统调用号和传递了参数 ,系统调用返回值使用eax存储,参数用ebx存储
(三)进行C语言代码实例编写:
代码如下:

运行结果:

(四)编写嵌入式汇编代码
代码如下:

运行结果:

通过内嵌汇编代码可以清晰的看出调用系统调用的工作过程:
①将ebx寄存器清零,表示无参数传入。
②将需要调用的系统调用号赋值给eax寄存器
③执行int 0x80来执行系统调用。
④eax寄存器保存了返回值,将它分别赋值给输出uid或gid变量。
(在Linux系统中是通过激活0x80中断来触发系统调用的,需要调用的系统调用号实现赋值给eax存储器,如果有传入参数可赋值给ebx寄存器,如果多于1个则按顺序赋值给ebx、ecx、edx、esi、edi、ebp,如果超过6个则通过指针变量指向另一片堆栈区,如果无参数传入则赋值为0)
linux及安全第四周总结的更多相关文章
- Linux内核设计第四周——扒开系统调用三层皮
Linux内核设计第四周 ——扒开系统调用三层皮 一.知识点总结 (一).系统调用基础知识 1.用户态和内核态 内核态:在高级别的状态下,代码可以执行特权指令,访问任意的物理地址: 用户态:在相应的低 ...
- 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内核分析——第四周学习笔记20135308
第四周 扒开系统调用的“三层皮” 一.内核.用户态和中断 (一)如何区分用户态.内核态 1.一般现在的CPU有几种不同的指令执行级别 ①在高级别的状态下,代码可以执行特权指令,访问任意的物理地址,这种 ...
- Linux内核分析第四周学习总结:扒开系统调用的三层皮(上)
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核 ...
- LINUX内核分析第四周学习总结——扒开应用系统的三层皮(上)【转】
转自:http://www.cnblogs.com/lalacindy/p/5276874.html 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://moo ...
随机推荐
- creo5.0安装教程(图文详解)
PTC公司最近发布了Creo 5.0正式版 ,作为最具其革命性的新一代产品设计软件,其所提供专业的二维和三维设计设计,能帮助企业和公司进行产品生命周期管理(PLM)和制定服务管理解决方案.Creo5. ...
- 17秋 软件工程 第六次作业 Beta冲刺 Scrum3
17秋 软件工程 第六次作业 Beta冲刺 Scrum3 各个成员冲刺期间完成的任务 世强:完成手势签到模块,重构活动详情页面: 陈翔:完善超级管理员后端login模块,完成logout模块: 树民: ...
- 建立标准编码规则(一)-自定义C#代码分析器
1.下载Roslyn的Visual Studio分析器模板插件(VS2015 或VS2017) https://marketplace.visualstudio.com/items?itemName= ...
- Hibernate Tools生成注释
原文:http://www.blogjava.net/pauliz/archive/2009/11/13/302162.html 有同学需要修改后的Hibernate Tools整个tool我就不上传 ...
- python五十八课——正则表达式(切割)
切割:split(regex,string):返回一个列表对象 import re str1='i love shenzhen so much' regex=r' +?' lt=re.split(re ...
- BZOJ3295:[CQOI2011]动态逆序对(CDQ分治)
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
- 如何使用openscad绘制一个简单的键帽.
1 新建空项目 2测数据 测量得出数据.这个长方体的长宽高分别是1.6.4.6.8 注意,这三个数据并不是测量得到的数据,而且加了一点公差值(为3D打印做准备) 3画图 写代码 导入模型 为了方便以后 ...
- PCB (4)原理图导入PCB
1导入原理图 打开原理图 之后出现对话框,检查错误,选择更新 2 自动对齐 2布线 手动布线 半自动布线 自动布线 输出
- Oracle 11g中的snapshot standby特性
在Oracle 11g中,data guard最吸引人的,除了active data guard的实时查询特性(即可以以只读方式打开物理standby数据库的同时MRP进程能继续做recover),快 ...
- python基础学习第四天
#字符串到数字 可以进行各种进制转换#print(int('11111',8)) #需求 对字符串中的单词翻转 保留空格#第一种方法 最笨clstr='I love you!'bam=clstr.sp ...