码迷,mamicode.com
首页 > 其他好文 > 详细

第五周

时间:2016-03-26 21:59:46      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

潘恒 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 

一、使用gdb跟踪分析一个系统调用内核函数

1.增加系统调用

  1).先执行rm menu -rf,强制删除原有的menu文件夹,使用git命令更新menu代码至最新版
    技术分享

  2).test.c中main函数里,增加MenuConfig()
    技术分享

  3).增加对应的两个函数,Getpid和GetpidAsm
    技术分享
    技术分享

  4).make rootfs

    输入help,可以看到当前的系统调用:

    技术分享

  5).

    技术分享成功。

2.使用 gdb调试

           技术分享
 
            技术分享
   c运行之后,在MenuOs里使用time,可以看到它停了下来
           技术分享
   list可以查看内部的函数,直到sys_time返回后进入汇编代码处理,gdb无法继续进行追踪
          技术分享

二、分析从system_call开始到iret结束之间的整个过程

  1. SAVE_ALL:保存现场
  2. syscall_call:调用了系统调用处理函数
  3. restore all:恢复现场(因为系统调用处理函数也算是一种特殊的“中断”)
  4. syscallexitwork:同上一条i
  5. INTERRUPT RETURN:也就是iret,系统调用到此结束

三、对系统调用处理过程的理解

  1.用户态到内核态需要int 0x80进行中断,只有生成了中断向量后才可以切换状态;

  2.中断处理让CPU停止当前工作转为执行系统内核中预设的一些任务,因此必须要对当前CPU执行的任务进行执行现场的保护工作,并对一些其他杂七杂八的工作进行检查,完成调用后,再进行检查,才能执行iret返回。

  

第五周

标签:

原文地址:http://www.cnblogs.com/ppph1995/p/5324096.html

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