Linux实验四报告
张文俊 + 原创作品转载请注明出处+ 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
一、学习内容
系统调用:操作系统为用户态进程与硬件设备进行交互提供了一组接口
API:应用编程接口,是一个函数定义。
操作系统提供API和系统调用的关系。
Libc库定义的一些API引用封装例程(wrapper routine)。一般每个系统调用对应一个封装例程。库再用这些封装例程定义给用户的API。
返回值:
1、大部分封装例程返回一个整数,值含义依赖于相应的系统调用;
2、-1,多数情况——内核不满足进程请求。
3、Libc定义errno变量包含特定出错码。
二、实验部分:两种方式调用系统调用
用户态进程——(调用)——>系统调用
CPU——(切换)———内态核执行一个内核函数
linux中,通过执行int $0x80执行系统调用的,此汇编指令产生向量为128的编程异常。
中断向量0x80与system_call绑定起来,系统调用号将xyz和sys_xyz关联起来。
系统调用三层皮:
API XYZ
中断向量system_call
中断服务程序sys_xyz
其中,system_call是Linux所有系统调用的入口点。
<span style="text-decoration: underline;"><strong>传参</strong></span>:
1、内核实现不同系统调用。
2、进程必须指明哪个系统调用,这需要传递一个名为系统调用号的参数。使用EAX寄存器传递 3.ebx,ecx,edx,esi,edi按照顺序存放前五个参数。
4、需要六个或六个以上参数时,应用一个单独的寄存器存放指向所有参数在用户空间地址的指针。
5、返回值用eax。
寄存器传递参数限制
1、参数长度小于或等于寄存器长度(32位);
2、除系统调用号(EAX),参数个数不超6个( EBX,ECX,EDX,ESI,EDI,EBP)
关于实验,首先分析库函数调用系统调用的工作过程

getpid()函数功能:
取得进程识别码,返回值是进程的ID 这里直接使用getpid库函数进行系统调用。
传入的参数为NULL,通过EAX传入,再通过EAX将返回值传回。
其次,分析汇编代码调用系统调用的工作过程

系统调用传递第一个参数ebx,这里是null
8行,将ebx清零; 9行,将20放入EAX 11行,返回值用EAX存储
总之,int 80触发中断,找到中断向量表,从表中寻找中断向量(或中断门),通过中断向量,找到系统调用表,
找到system_call JMP EAX*4+system_table
最后,对两者的编译结果进行分析:两种方式的编译运行结果分别是2999和3065。

三、总结部分
系统调用工作机制,就是应用程序应该以某种方式(库函数或汇编代码)通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态。
内核就可以代表应用程序在内核空间执行系统调用。
此外,通知内核的机制是靠软中断实现的:
通过引发异常将系统切换内核态执行异常处理程序(系统调用处理程序)。
Linux实验四报告的更多相关文章
- 20145204&20145212信息安全系统实验四报告
20145204信息安全设计基础实验四报告 博客链接:信息安全设计基础实验
- 20184302 2019-2020-2 《Python程序设计》实验四报告
20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...
- 20192204 2019-2020-2 《Python程序设计》实验四报告
20192204 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...
- 20201123 《python程序设计》实验四报告
20201123 2020-2021-2 <python程序设计>实验三报告 课程:<Python程序设计>班级:2011姓名:晏鹏捷学号:20201123实验教师:王志强实验 ...
- 20145302张薇《Java程序设计》实验四报告
20145325张薇 实验四:Andoid开发基础 实验内容 使用 Android Studio 设计"Hello" 设计过程 首先创建项目 选择.xml中的`Design 选中W ...
- 【MOOC EXP】Linux内核分析实验四报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [使用库函数API和C代码中嵌入汇编代 ...
- 20145212&20145204信息安全系统实验四报告
一.实验内容与步骤 1.本次实验建立在掌握嵌入式开发平台使用方法和配置方法的基础上,要求使用windows xp,linux(red hat),arm三个系统(即NFS方式): 2.在linux系统中 ...
- Linux实验二报告
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级: 201352 姓名:池彬宁 贺邦 学号:2013521 ...
- 20212115朱时鸿 《python程序设计》实验四报告
课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号:20212115实验教师:王志强实验日期:2022年5月28日必修/选修: 公选课 1.实验内容 Python综合应用:爬 ...
随机推荐
- 计算机基础-BIOS
BIOS--硬件和软件的纽带(Basic Input Output System) 1.含义:基本的输入输出系统,它是一组固化到计算机内主板上的一个ROM存储芯片上的程序 2.性质:它保存着计算机最重 ...
- Perfect Pth Powers pku-1730(筛+合数分解)
题意:x可以表示为bp, 求这个p的最大值,比如 25=52, 64=26, 然后输入x 输出 p 就是一个质因子分解.算法.(表示数据上卡了2个小时.) 合数质因子分解模板. ]; ]; ; ;n ...
- 为什么说Redis是单线程的以及Redis为什么这么快!(转)
文章转自https://blog.csdn.net/chenyao1994/article/details/79491337 一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到 ...
- layui前端框架之分页
框架环境:SSM框架 为了保证效果,此次演示也用到了jQuery ui框架,大家最好也引入进来 一.去layui官网下载包,解压后,然后导入文件中,最好放再main/webapp文件夹下 官网地址如下 ...
- 关于原型继承中的constructor重定向的问题
上代码 function SuperType(name){ this.name = name; this.colors = ["red","blue",&quo ...
- Omi框架学习之旅 - 插件机制之omi-router及原理说明
先来看看官网的介绍吧:https://github.com/AlloyTeam/omi/tree/master/plugins/omi-router 其实我推荐直接看官网的介绍.我所写的,主要给个人做 ...
- Linux系列教程(六)——Linux常用命令之文件搜索命令
前一篇博客我们讲解了Linux链接命令和权限管理命令, 通过 ln -s 链接名 表示创建软链接,不加-s表示创建硬链接:还有三个更改权限的命令,chmod命令可以更改文件或目录权限,chown命令 ...
- Unity 协程停不了?
你是不是遇到过协程停不了的情况?你是直接调用IEnumerator方法,如下? void Start () { StartCoroutine(IETest01()); StartCoroutine(I ...
- Ubuntu 安装google chrome
sudo apt-get install google-chrome-stable /usr/bin/google-chrome-stable
- Can't connect to MySQL server (10060)
前天刚装的MySql,今天再次使用就出现了标题显示的错误.我是本地机器连接Linux下的MySql. 网上有一些解决方案: 方法一.检查本地的防火墙 如果是如上状态,请关闭防火墙再试. 方法二.检查服 ...