2019-2020-1 20199326《Linux内核原理与分析》第五周作业
第五周学习内容
庖丁解牛Linux内核分析第四章:系统调用的三层机制(上)
Linux内核分析实验四
学到的一些知识
4.1用户态、内核态、中断
- 宏观上Linux操作系统的体系架构分为用户态和内核态
- Intel x86 CPU有4种不同的执行级别,分别是0、1、2、3,数字越小,特权越高,而Linux只采用了0,3两个特权级别,分别对应内核态和用户态,用户态和内核态很显著的区分方法就是CS:EIP的指向范围,拿32位系统来说,总共有2的32次方地址空间,也就是4GB,内核态可以访问全部地址空间,但是用户态只能访问0x00000000~0xbfffffff的地址空间,这里说的地址都是逻辑地址。
- 中断处理是从用户态进入内核态的主要方式
- int指令触发中断机制会在堆栈上保存一些寄存器的值,用户态栈顶地址、当时的状态字、当时的CS:EIP的值。同时会将内核态的栈顶地址、内核态的状态字放入CPU对应的寄存器。
- Linux下系统调用通过int 0x80中断完成
4.2系统调用概述
- 系统调用的意义是操作系统为用户态进程与硬件设备进行交互提供了一组接口,系统调用具有以下功能和特性
- 把用户从底层的硬件编程中解救出来
- 极大地提高系统的安全性
- 使用户程序具有可移植性
- 一般每个系统调用对应一个系统调用的封装例程
- 系统调用的3层机制分别为xyz(),system_call和sys_xyz()
- 内核实现了很多不同的系统调用,用户态进程必须指明需要哪个系统调用,这需要使用EAX寄存器传递一个名为系统调用号的参数,例如调用time需要传入38。
- 内嵌汇编常用的修饰限定符
- abcd代表eax-edx寄存器,q代表将输入变量放入其中任意一个,s代表esi,d代表edi,r代表将输入变量放入其中任意一个。m表示内存变量
实验内容
使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
我选用了getpid这个系统调用。直接调用如下图:


为了得到getpid对应的调用号,在shell里进入/usr/include/asm文件夹,发现有两个文件,一个是unistd_32.h,另一个是unistd_64.h,分别对应32位和64位系统的系统调用列表,此处我们要在64位下进行系统调用,打开unistd_64.h这个文件,如下所示

查到getpid对应调用号位39,用16进制表示为0x27,根据书中所学,在原C代码中进行修改,加入汇编代码,执行,如下所示


2019-2020-1 20199326《Linux内核原理与分析》第五周作业的更多相关文章
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 《Linux内核原理与分析》第一周作业 20189210
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...
- 2018-2019-1 20189221《Linux内核原理与分析》第二周作业
读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- 一些常用关键字的用法(一.static)
17:36:26 2020-04-05 又是充实的一天,刚刚开始学习不久java的我,从面向过程的语言转变到面向对象的语言,在思想上上还是需要花费很多时间转变的.今天学习到了这几个关键字了,觉得这几个 ...
- Python学习-第三节part1: 关于函数
一 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护 ...
- Java并发基础09. 多个线程间共享数据问题
先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...
- Redis 笔记(六)—— ZSET 常用命令
常用命令 命令 用例和描述 ZADD ZADD key-name score member [score member ...] —— 将带有分值的成员添加到 HSET 中 ZREM ZREM key ...
- 【php】字符串
1.字符串的定义方式:1.单引号 ''2.双引号 ""3.定界符 <<<注意结束时的使用例:$str = <<<myStr字符串内容myStr; ...
- 以太坊代币,USDT归集流程图
1.用户充值 600 代币 (网站小助手会及时监听到用户的充值信息,并回调给用户填写的URL地址) 2.会员转账600代币,属于大额转账,开始触发系统的自动汇集程序 注:这里系统检测到会员的地址并没有 ...
- Tkinter 控件
文章更新于:2020-02-19 待翻译跟进 In this part of the Tkinter tutorial, we will cover some basic Tkinter widget ...
- python图片拼接
python图片拼接 这两天看到一张图片,想用python来实现类似的图片拼接 先分析图片: 很明显,这张图片是由多张图片叠加拼接而成 从最后一张开始开始叠加,之后的每张图片都往上平移了一个固定的距 ...
- MySQL入门,第五部分,表结构的修改
ALTER TABLE <基本表名> [ ADD <新列名> <列数据类型> [列完整性约束] DROP COLUMN <列名> MODIFY < ...
- 算法:模拟退火(基于c++程序)
一 什么是模拟退火算法? 所谓退火,其实是金属冶炼的一个名词.比如加工一把刀,我们通常是把材料加工到很高的一个温度,加以锤炼.之后慢慢的将温度降下来,如果我们降温的控制比较好的话,那么金属里面的原子就 ...