张文俊 + 原创作品转载请注明出处+ 《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实验四报告的更多相关文章

  1. 20145204&20145212信息安全系统实验四报告

    20145204信息安全设计基础实验四报告 博客链接:信息安全设计基础实验

  2. 20184302 2019-2020-2 《Python程序设计》实验四报告

    20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...

  3. 20192204 2019-2020-2 《Python程序设计》实验四报告

    20192204 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...

  4. 20201123 《python程序设计》实验四报告

    20201123 2020-2021-2 <python程序设计>实验三报告 课程:<Python程序设计>班级:2011姓名:晏鹏捷学号:20201123实验教师:王志强实验 ...

  5. 20145302张薇《Java程序设计》实验四报告

    20145325张薇 实验四:Andoid开发基础 实验内容 使用 Android Studio 设计"Hello" 设计过程 首先创建项目 选择.xml中的`Design 选中W ...

  6. 【MOOC EXP】Linux内核分析实验四报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [使用库函数API和C代码中嵌入汇编代 ...

  7. 20145212&20145204信息安全系统实验四报告

    一.实验内容与步骤 1.本次实验建立在掌握嵌入式开发平台使用方法和配置方法的基础上,要求使用windows xp,linux(red hat),arm三个系统(即NFS方式): 2.在linux系统中 ...

  8. Linux实验二报告

    北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全系统设计基础                     班级: 201352 姓名:池彬宁 贺邦 学号:2013521 ...

  9. 20212115朱时鸿 《python程序设计》实验四报告

    课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号:20212115实验教师:王志强实验日期:2022年5月28日必修/选修: 公选课 1.实验内容 Python综合应用:爬 ...

随机推荐

  1. 15LaTeX学习系列之---LaTeX里插入数学公式

    目录 目录 前言 (一)常用的数学公式命令 ==1.上下标== ==2.矢量== ==3.括号== ==4.符号关系== ==5.三角形符号== ==6.求和与累积== ==7.积分与微分== ==8 ...

  2. C++基础算法学习——逆波兰表达式问题

    例题:逆波兰表达式逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 ...

  3. Ubuntu 12.10 Tty (字符终端) 显示中文,和字体大小设置

    Tty通过修改默认的中文编码字符,和安装zhcon都无法显示中文.可安装fbterm来显示中文,命令:sudo apt-get install fbterm安装即可,进入Tty: (Ctrl+Alt+ ...

  4. 在excel中将缺失数据全部用0补齐

    先ctrl+H ,出现如下对话框 点击“定位”,选择“空值” 在表格中空的位置上编辑栏输入0,CTRL+ENTER,即可将缺失数据全部用0补齐.

  5. Unity3d粒子系统详解

  6. Sudoku 个人项目1

    Github项目地址:Github 项目相关要求 随机构造出N个不重复的已解答的数独棋盘(0 < N <= 1000000) 在生成数独矩阵时,左上角的第一个数为:(学号后两位相加)% 9 ...

  7. sql语句如何将多个空格字符替换成一个空格字符

    很多时候,数据表中某个字段的值会带有一个或多个空格字符串的情况,面对多样化的需求,我们可能需要将这些空格字符串去除,当然,这很好说,我们可以直接用replace(' ','')将单个空格变成无就可以了 ...

  8. Entangle 2.0 “Sodium”正式发布

    导读 Entangle是一款自由而开源的软件,可让您从Linux控制DSLR相机. 使用各种尼康和佳能数码单反相机,可以查看实时预览,自动下载图像,并通过USB连接将照片拍摄到相机. 自上次听到Ent ...

  9. rook 入门理解

    参考:https://my.oschina.net/u/2306127/blog/1830356?from=timeline 1.Rook通过一个操作器(operator)完成后续操作,只需要定义需要 ...

  10. SkylineGlobe 如何二次开发实现天际线分析功能

    天际线效果: 示例代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <h ...