linux及安全第四周总结——20135227黄晓妍
总结部分:
用户态和内核态:
前提知识:cpu有几种不同指令执行的级别
用户态:代码的掌控范围受限制
内核态:高级别,代码课执行特权指令,访问任意物理地址。
权限设置的意义:没有的话,系统容易啊崩溃,应用程序代码没有内核代码可靠
Linux有两种执行级别:0级(内核态)3级(用户态)
Cs寄存器的最低两位表明当前代码的特权级别(一共可以表示四种)
CPU每条指令的读取都是通过当前CS:eip这两个寄存器
逻辑地址空间,可以显著地分开用户态和内核态
0xc0000000以上只有内核态
0x00000000~0xbfffffff用户态和内核态
中断处理:用户态进入内核态的主要方式
用户也可以通过系统调用陷入内核,系统调用是特殊的中断。
寄存器上下文
用户切换到内核,必须保存用户态的寄存器上下文
中断int指令会在堆栈上保存:
用户态栈顶地址,当时的状态字,当时的cs:eip值
内核态栈顶地址,当时的状态字,中断处理程序入口。
中断服务程序:
首先保护现场(SAVE_ALL:保存需要用到的寄存器数据)。
退出恢复现场(RESTORE_ALL:退出中断程序,恢复保存寄存器的数据)。
用户态进程和硬件设备的交互:系统调用
- 把用户态从底层的硬件设备编程中解放出来
- 极大地提升了系统安全性
- 有利于程序的可移植性
应用程序接口API :仅是函数定义
系统调用:是进程明确的请求
每一个系统调用对应一个封装例程,封装例程再被API引用。但是API和系统调用没有明确的对应关系,可能一对一,一对多,多对多,多对一。
系统调用“三层皮”
API
中断向量
中断服务程序
当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数。
Linux中是通过执行int $0x80来执行系统调用,这条汇编指令产生向量为128的编程异常;即中断向量0x80与System_call绑定起来。
系统调用号将函数xyz()和中断服务程序sys_xyz关联起来。
参数传递
进程用系统调用号指明哪个系统调用。
system_call是linux中所有系统调用的入口点,每个系统调用至少有一个参数,使用eax寄存器传递系统调用号。
寄存器传递参数有限制,每个参数的长度不能超过寄存器的长度,即32位;在系统调用号(eax)之外,参数的个数不能超过6个(ebx,ecx,edx,esi,edi,ebp;-超过6个的情况下,使用某一个寄存器作为指针,进入内核态之后可以访问所有的地址空间,通过某一片区域传递参数。
实验部分:
我选取了50号函数getegid
首先查看它包含的库和返回值

/*getegid1.c*/
#include<unistd.h>
#include<stdio.h>
int main()
{
gid_t gid;
gid = getegid ();
printf(“the group ID is %d”,gid);
return 0;
}

运行结果

该程序的嵌入式汇编代码版
/*getegid2.c*/
#include<unistd.h>
#include<stdio.h>
int main()
{
gid_t gid;
gid = getegid ();
asm volatile(
“mov $0x32,%%eax\n\t”//50号系统调用用eax传递
“int $0x80\n\t”//中断向量,执行中断服务程序
“mov %%eax,%0\n\t”//返回值保存在gid中
:”=m”(gid)
);
printf(“the group ID is %d”,gid);
return 0;
}

运行结果

分析:
系统调用的过程:先将系统调用号放在%eax里,相当于API和中断服务程序连接的桥梁,然后执行中断指令int$0x80,在堆栈上保存用户态栈顶地址,当时的状态字,当时的cs:eip值;内核态栈顶地址,当时的状态字,中断处理程序入口。然后系统调用的函数开始在内核执行,执行的结果(返回值)保存在%eax里,再由%eax传入gid,然后弹栈恢复现场。
linux及安全第四周总结——20135227黄晓妍的更多相关文章
- linux及安全第二周总结——20135227黄晓妍
实验部分: 首先运行结果截图 代码分析: Mypcb.h /* * linux/mykernel/mypcb.h * * Kernel internal PCB types * * Copyri ...
- linux及安全期中总结——20135227黄晓妍
Linux及安全期中总结 黄晓妍 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...
- Linux基础入门学习笔记20135227黄晓妍
学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用L ...
- linux及安全《Linux内核设计与实现》第四章——20135227黄晓妍
第四章 进程调度 进程调度程序是一个内核子系统 分配有限的处理器时间和资源 最大限度利用时间的原则(只要有可执行的进程,那么总会有进程执行) 基本工作:从一组处于等待(阻塞)状态的可执行进程中选择一个 ...
- linux及安全《Linux内核设计与实现》第三章——20135227黄晓妍
第三章 (由于linux不区分进程和线程,所以它们在linux中被称为task,也叫任务) 总结:本章主要包括进程以及线程的概念和定义,Linux内核如何管理每个进程,他们在内核中如何被列举,如何创建 ...
- linux及安全第八周总结——20135227黄晓妍
实验部分 实验环境搭建 -rm menu -rf git clone https://github.com/megnning/menu.git cd menu make rootfs qemu -ke ...
- linux及安全第七周总结——20135227黄晓妍
实验部分 首先clone最新的menu 我们可以看到,test.c里多了一个exec的功能,它的代码和fork基本一致,多了一项加载hello rootfs也有一些变化 执行一下exec 让我们启动一 ...
- linux及安全第六周总结——20135227黄晓妍
总结部分: 操作系统内核三大功能: 进程管理,内存管理,文件系统 最核心的是进程管理 为了管理,首先要对每一个进程进行描述.进程描述符提供了所有内核需要了解的信息. 进程控制模块:task_struc ...
- linux及安全第五周总结——20135227黄晓妍
(注意:本文总结备份中有较多我手写笔记的图片,其中重要的部分打出来了.本文对分析system_call对应的汇编代码的工作过程,系统调用处理过程”的理解,以及流程图都写在实验部分.) 实验部分 使用g ...
随机推荐
- FTP新建文件夹访问
今天在远程服务器上添加了文件夹,本来还想着FTP打开看看,结果竟然发现没有这个文件夹访问 想了一下,感觉应该是FTP访问的文件设置,只有FTP设置了的文件夹才能有显示
- 设计模式之抽象工厂模式(Java实现)
“上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说完,摸了摸跪的发疼的膝盖,咳咳,我发四我没笑!真 ...
- LeetCode——Palindrome Linked List
Description: Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it ...
- UVa 673 Parentheses Balance (stack)
题目描述 : 判断字符串是不是符合正确的表达式形式. 要点 : 考虑字符串为空的时候,用getline输入,每一次判断后如果为No则要清空栈.对称思想. 注意输入格式. 代码: #include &l ...
- RxJava && Agera 从源码简要分析基本调用流程(1)
版权声明:本文由晋中望原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/123 来源:腾云阁 https://www.qclo ...
- vim命令删除后重新安装
个人原创博客,转载请注明,否则追究法律责任 2017-09-30-09:51:20 1,删除vim命令.模拟错误 [root@localhost ~]# which vim/usr/bin/vim[r ...
- 【BZOJ4553】[Tjoi2016&Heoi2016]序列 cdq分治+树状数组
[BZOJ4553][Tjoi2016&Heoi2016]序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能 ...
- 【BZOJ2743】[HEOI2012]采花 离线+树状数组
[BZOJ2743][HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花, ...
- 借助HTML5 Blob实现文本信息文件下载
原理其实很简单,我们可以将文本或者JS字符串信息借助Blob转换成二进制,然后,作为<a>元素的href属性,配合download属性,实现下载. 代码也比较简单,如下示意(兼容Chrom ...
- 热力图实现-heatmap.js 代码示例
Heatmap.js – 最强大的 Web 动态热图 最新公司项目需要用到热力图,在百度上搜下,了解到heatmap.js这款神器.然后搜了下例子,却很难搜到马上出效果的例子,特此写一篇heatma ...