第五周学习内容

庖丁解牛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内核原理与分析》第五周作业的更多相关文章

  1. 2019-2020-1 20199329《Linux内核原理与分析》第九周作业

    <Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...

  2. 2019-2020-1 20199329《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...

  3. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  4. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  5. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  6. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业

    20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...

  7. 2019-2020-1 20209313《Linux内核原理与分析》第二周作业

    2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

  10. 2018-2019-1 20189221《Linux内核原理与分析》第二周作业

    读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...

随机推荐

  1. JavaScript 异步、栈、事件循环、任务队列

    概览 我们经常会听到引擎和runtime,它们的区别是什么呢? 引擎:解释并编译代码,让它变成能交给机器运行的代码(runnable commands). runtime:就是运行环境,它提供一些对外 ...

  2. 面试都在问的「微服务」「RPC」「服务治理」「下一代微服务」一文带你彻底搞懂!

    ❝ 文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ❞ 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程 ...

  3. winsocket编程笔记(一)

    前言: 因为疫情原因,现在一直在网上授课,教师在讲述winsocket这一课程时没有给予我们课本,只有毫不相搭的linux环境的socket编程视频,故于此(开学第七周)总结winsocket的内容. ...

  4. JS 剑指Offer(二)二维数组中的查找

    04.在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. var ...

  5. 微信小程序页面传值详解

    我们知道,在微信小程序中,从一个页面转到另一个页面,一般情况下可以通过navigate或redirect时候的url来携带参数,然后在目标页面的onLoad函数参数中获取这些url参数.例如:   / ...

  6. X-Admin&ABP框架开发-版本管理

    多租户系统中,针对于不同租户开放不同功能,或是按照不同功能进行收费管理,需要从宿主本身去管理租户的版本信息,如同酒店人员对不同房间收取不同费用,依据房间内部设施,房间大小等设置不同收费标准.Abp系统 ...

  7. PHP中涉及文件路径的讨论

    #1 $_SERVER中的PHP_SELF,当前执行脚本的文件名,与 document root 有关.例如,在地址为 http://example.com/test.php/foo.bar 的脚本中 ...

  8. python 函数--匿名函数

    一.匿名函数的定义: 解决一些简单的需要用函数去问题,匿名函数的函数体只有一行. 二.格式: calc = lambda n:n**n 函数名   = 匿名函数  参数:返回值 三.练习:

  9. 汇编刷题:在M单元和N单元分别存有一个8位无符号数36H和95H,要求比较并输出 M大于N 或者 M小于N

    DATA SEGMENT     M DB 36H     N DB 95H     RESAULT1 DB 'M>N$'     RESAULT2 DB 'M<N$' DATA ENDS ...

  10. 自动生成四则运算题目(C语言)

    Github项目地址:https://github.com/huihuigo/expgenerator 合作者:马文辉(3118005015).卢力衔(3118005013) 项目简介 1题目:实现一 ...