分析system_call中断处理过程
2016-03-26 15:39
176 查看
秦鼎涛 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
一、实验要求:
1、使用gdb跟踪分析一个系统调用内核函数
2、根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图
二、实验步骤:
1、实验环境是使用本课程配置的实验楼虚拟机环境,打开命令行客户端,cd LinuxKernel目录,使用命令rm -rf menu
删除原来的代码,使用git clone https://github.com/mengning/menu.git获取menu的最新代码,然后cd menu进入menu子
文件夹,使用vi test.c打开文件,将上周实验的代码拷贝入test.c中,构造成两个函数,成为menu的两个菜单项。
实验截图如下:
克隆并自动编译MenuOS
![](http://images2015.cnblogs.com/blog/745371/201603/745371-20160325205137058-2048825589.png)
在main()函数中添加两行命令
![](http://images2015.cnblogs.com/blog/897760/201603/897760-20160324070426214-2052071512.jpg)
可以看到输入getpid时可以看到当前的pid
![](http://images2015.cnblogs.com/blog/897760/201603/897760-20160324071002401-201193541.jpg)
2、分析system_call处理流程(通过网络以及老师所讲的流程图如下)
![](http://www.myexception.cn/img/2015/04/09/112029665.jpg)
三、总结:
系统通过int 0x80从用户态进入内核态。在这个过程中系统先保存了中断环境,然后执行系统调用函数。
通过中断向量表,将int 0x80和system_call关联起来,system_call又是通过系统调用号,将每一个系统
调用和特定的系统调用服务例程关联起来。
一、实验要求:
1、使用gdb跟踪分析一个系统调用内核函数
2、根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图
二、实验步骤:
1、实验环境是使用本课程配置的实验楼虚拟机环境,打开命令行客户端,cd LinuxKernel目录,使用命令rm -rf menu
删除原来的代码,使用git clone https://github.com/mengning/menu.git获取menu的最新代码,然后cd menu进入menu子
文件夹,使用vi test.c打开文件,将上周实验的代码拷贝入test.c中,构造成两个函数,成为menu的两个菜单项。
实验截图如下:
克隆并自动编译MenuOS
![](http://images2015.cnblogs.com/blog/745371/201603/745371-20160325205137058-2048825589.png)
在main()函数中添加两行命令
![](http://images2015.cnblogs.com/blog/897760/201603/897760-20160324070426214-2052071512.jpg)
可以看到输入getpid时可以看到当前的pid
![](http://images2015.cnblogs.com/blog/897760/201603/897760-20160324071002401-201193541.jpg)
2、分析system_call处理流程(通过网络以及老师所讲的流程图如下)
![](http://www.myexception.cn/img/2015/04/09/112029665.jpg)
三、总结:
系统通过int 0x80从用户态进入内核态。在这个过程中系统先保存了中断环境,然后执行系统调用函数。
通过中断向量表,将int 0x80和system_call关联起来,system_call又是通过系统调用号,将每一个系统
调用和特定的系统调用服务例程关联起来。
相关文章推荐
- Android自定义控件之刻度尺控件
- Android访问服务器返回中文乱码
- Apache编译安装的时候出现的报错
- ASP.NET使用HttpWebRequest读取远程网页源代码
- 错误:java.lang.UnsupportedClassVersionError: Bad version number in .class file
- 初识google多语言通信框架gRPC系列(一)概述
- 快速排序模板、
- codeforces 614 A. Link/Cut Tree
- Codeforces 631C-Report
- 极光推送Demo学习
- SonarQube代码质量管理平台安装与使用
- ……
- CentOS 7 下安装 SVN (HTTPS + SSH)
- Kali linux 2 使用 Burpsuite 1.6.38
- 重要技术博客记录
- Go语言学习(五)流程控制语句
- 阿里云上传下载API接口使用
- 数组系列练习一
- 浅析GLib
- 完美解决IE(IE6/IE7/IE8)不兼容HTML5新标签的方法