扒开系统调用的三层皮(上)

一、用户态.内核态.中断

(上周课件有学习到)

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内核分析(第四周)的更多相关文章

  1. LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”

    LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...

  2. 20135327郭皓--Linux内核分析第四周 扒开系统调用的三层皮(上)

    Linux内核分析第四周 扒开系统调用的三层皮(上) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/U ...

  3. linux内核分析第四周学习笔记

    linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  4. LINUX内核分析第四周——扒开系统调用的三层皮

    LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  5. Linux内核分析第四周学习总结——系统调用的工作机制

    Linux内核分析第四周学习总结--系统调用的工作机制 内核态 执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级. 用户态 执行级别低,只能访问0x0000 ...

  6. Linux内核分析第四周学习总结:扒开系统调用的三层皮(上)

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核 ...

  7. LINUX内核分析第四周学习总结——扒开应用系统的三层皮(上)【转】

    转自:http://www.cnblogs.com/lalacindy/p/5276874.html 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://moo ...

  8. Linux内核分析第四周学习总结

    朱国庆+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 扒开系统调用的三层皮 ...

  9. linux内核分析 第四周

    一.系统调用的三层皮 内核态.用户态 Intel x86 CPU有四个权限分级,0-3.Linux只取两种,0是内核态,3是用户态. 0xc0000000以上的空间只能在内核态下访问 0x000000 ...

  10. 20135320赵瀚青LINUX内核分析第四周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周的内容主要是讲解系 ...

随机推荐

  1. 第二次项目冲刺(Beta版本)2017/12/6

    一.任务明细 二.燃尽图 三.站立式会议 1.照片(随后上传) 2.会议任务安排 四.总结 第一天冲刺,准备工作不足啊,期末了,最近大家都比较忙吧,开始战斗吧.

  2. Python os.md

    os 便携式访问操作系统的特定功能.os模块提供了对特定平台模块(如posix, nt, mac)的封装, 函数提供的api在很多平台上都可以相同使用, 所以使用os模块会变得很方便. 但不是所有函数 ...

  3. AtCoder Regular Contest

    一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状 ...

  4. oneinstack远程管理数据库

    本篇文章主要内容是本地工具连接数据非网页(网站)连接 如果你想使用网页(网站)连接远程数据库,请看下面的官网教程 OneinStack如何配置MySQL远程连接? 为了安全考虑,OneinStack仅 ...

  5. 20165302Exp0 Kali安装 Week1

    一,下载 下载网址https://www.kali.org/downloads/ 二,安装(安装过程中有一部分没有截图,因此没有贴上) 创建虚拟机 选择Linux,版本Ubuntu 一直下一步,最后点 ...

  6. rpm -qa 查找文件

    系统环境:centos6.6 yum install 安装的文件找不到安装路径,使用whereis和find -name都无效 rpm -qa | grep -i 关键字  查找 rpm -ql fi ...

  7. 真实的物理机安装Centos7系统后网卡只有lo没有eno1的解决办法:实际上是物理机未安装网驱动卡

    问题症状: 我真实的物理机安装Centos7系统后,在/etc/sysconfig/目录下查看,发现网卡只有lo没有eno1,出现该问题的实际原因是物理机未安装网驱动卡. 解决办法: 不多说了,让我们 ...

  8. WorldWind源码剖析系列:地形访问器类TerrainAccessor

    地形访问器类TerrainAccessor 地形访问器类TerrainAccessor提供了对地形(高程)Terrain (elevation)访问的各种接口interface,是NltTerrain ...

  9. kubernetes 生命周期问题分析

    1.Failed  -- pod里至少一个容器以非0code退出,说明应用有问题,需要debug应用容器 2.pending -- 说明API对象已经被创建和保存在etcd数据库里,但是创建过程出了问 ...

  10. jqgrid 让隐藏的列在编辑状态时出现且可编辑

    有时,我们需要隐藏一个列数据,但在启动编辑时又能够被编辑. 1.设置列为编辑:editable: true 2.设置 editrules属性值为: edithidden: true colModel: ...