码迷,mamicode.com
首页 > 系统相关 > 详细

Linux内核及分析 第五周 扒开系统调用的三层皮(下)

时间:2016-03-26 17:04:22      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

实验内容:

1.执行rm menu -rf命令,强制删除原有的menu

2.使用git命令 git clone https://github.com/mengning/menu.git 克隆新的menu技术分享

3.在test.c中,在main函数中增加两个MenuConfig

技术分享

4.增加对应的GetPid函数和GetPidAsm函数

技术分享

 

技术分享

5.通过脚本 make rootfs,编译并运行Menu

技术分享

6.设置断点使用gdb跟增系统调用内核函数sys_time

技术分享

系统调用是一种中断:

1. 保存现场

在系统调用时,我们需要SAVE_ALL,用于保存系统调用时的上下文。

同样,中断处理的第一步应该也要保存中断程序现场。

目的:在中断处理完之后,可以返回到原来被中断的地方,在原有的运行环境下继续正确的执行下去。

2. 确定中断信息

在系统调用时,我们需要将系统调用号通过eax传入,通过sys_call_table查询到调用的系统调用,然后跳转到相应的程序进行处理。

同样,中断处理时系统也需要有一个中断号,通过检索中断向量表,了解中断的类型和设备。

3. 处理中断

跳转到相应的中断处理程序后,对中断进行处理。

4. 返回

系统调用时最后要restore_all恢复系统调用时的现场,并用iret返回用户态。

同样,执行完中断处理程序,内核也要执行特定指令序列,恢复中断时现场,并使得进程回到用户态。

技术分享

作者: 王雪铖

原创作品转载请注明出处

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

Linux内核及分析 第五周 扒开系统调用的三层皮(下)

标签:

原文地址:http://www.cnblogs.com/20135105wangxc/p/5323204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!