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。

三、总结部分

系统调用工作机制,就是应用程序应该以某种方式(库函数或汇编代码)通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态。

内核就可以代表应用程序在内核空间执行系统调用。

此外,通知内核的机制是靠软中断实现的:
通过引发异常将系统切换内核态执行异常处理程序(系统调用处理程序)。

时间: 2024-08-09 01:05:52

Linux实验四报告的相关文章

20172306 《程序设计与数据结构》实验四报告

20172306<程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 刘辰 学号:20172306 实验教师:王志强 助教:刘伟康和张旭升 实验日期:2018年5月31日 必修/选修: 必修 1.实验内容 (1)Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 参考http://www.cnblogs.com/roc

学号 2017-2018-20172309 《程序设计与数据结构》实验四报告

学号 2017-2018-20172309 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 王志伟 学号:20172309 实验教师:王志强老师 实验日期:2018年4月18日 必修/选修: 必修 一.实验内容 测试一: Android Stuidio的安装测试: 参考课本第24章,完成Android studio的安装, 完成Hello World,按要求修改res目录中内容,Hello World后要显示自己的学号. 学习Android

20172305 2017-2018-2 《程序设计与数据结构》实验四报告

20172305 2017-2018-2 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 谭鑫 学号:20172305 实验教师:王志强 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容 (1)Android Stuidio的安装测试:参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章 安装 Android Stuidio 完成Hello W

20172311 2017-2018-2 《程序设计与数据结构》实验四报告

20172311 2017-2018-2 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 赵晓海 学号:20172311 实验教师:王志强 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容 (1)Android Stuidio的安装测试 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 参考http://www.cnblogs.com/r

20172303 2017-2018-2 《程序设计与数据结构》实验四报告

20172303 2017-2018-2 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 范雯琪 学号:20172303 实验教师:王志强 助教:张旭升/刘伟康 实验日期:2018年5月30日 必修/选修: 必修 实验内容 Android Stuidio的安装测试 Activity测试 UI测试 布局测试 事件处理测试 实验过程及结果 (一)Android Stuidio的安装测试 要求 参考<Java和Android开发学习指南(第

2017-2018-2《程序设计与数据结构》实验四报告

学号 2017-2018-2 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 彭霖 学号:20172312 实验教师:王志强 实验日期:2018年5月16日 必修/选修: 必修 1.实验内容 代码规范 协同测试 重构 密码学应用 2. 实验过程及结果 代码规范 检查过后,可以发现我之前编写代码几乎都存在许多不规范的地方,以standardcode作为使用代码规范的例子 打开代码实时规范扫描 红色下划线的部分就是不合规范的地方,使用Alt+E

20182311 2019-2020-1 《数据结构与面向对象程序设计》实验四报告

20182311 2019-2020-1 <数据结构与面向对象程序设计>实验四报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 冷冲 学号:20182311 实验教师:王志强 实验日期:2019年9月30日 必修/选修: 必修 1.实验内容 (一)Java Socket编程 1.学习蓝墨云上教材<Java和Android编程>"第16章 输入/输出 "和"第22章 网络",学习JavaSocket编程 2.结对编程.结

20165302实验四报告

20165302实验四实验报告 提交点1 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID,安装 Android Stuidio 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号,提交代码运行截图和码云Git链接,截图没有学号要扣分 学习Android Stuidio调试应用程序 截图 提交点2 构建项目,运行教材相关代码 创建 ThirdActivit

20172320 2017-2018-2 《程序设计与数据结构》实验四报告

20172320 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 李闻洲 学号:20172320 实验教师:王志强 实验日期:2018年5月31日 必修/选修: 必修 实验内容 (1)Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 参考http://www.cnblogs.com/ro