linux内核分析第五周学习笔记

标签(空格分隔): 20135328陈都


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


一、给MenuOS增加time和time-asm命令

  • 把menu删除;

rm menu -rf 强制删除

  • 重新克隆一个新的Menu;

  • 进入Menu,用makerootfs自动编译生成根文件系统,同时还自动启动MenuOS
  • 增加了两个命令:time和time_asm,说明扩展了功能。

二、使用gdb跟踪系统调用内核函数sys_time

  • 一直按n单步执行会进入schedule函数

  • Sys_time返回后进入汇编代码处理gdb无法继续跟踪

  • 执行int 0x80之后执行system_call对应的代码

  • 让系统停在system_call的位置进行调试

  • 执行int 0x80之后执行system_call对应的代码

三、系统调用在内核代码中的处理过程

1.系统调用在内核代码中的工作机制和初始化

(1)进程调度的时机要分析一下

  • sys_call_table是系统调用分派表
  • syscall_after_all,需要先保存返回值
  • sys_exit_work
  • 没有这个就restore_all,返回用户态。
  • 一旦进入sys_exit_work:会有一个进程调度时机

    2.简化后便于理解的system_call伪代码:

(1)系统调用的工作机制一旦在start kernel初始化好之后,在代码中一旦出现inter 0x80的指令,它就会立即跳转到system_call这个位置
call *sys_call_table(,%eax,4)调用了系统调度处理函数,eax存的是系统调用号

(2)定义的宏SAVE_ALL和RESTORE_ALL

(3)当一个系统调用发生的时候,它进入内核处理这个系统调用,内核提供了一些服务,在这个服务结束返回到用户态之前,它可能会发生

进程调度,就会发生进程上下文的切换和中断上下文的切换。

3.system_call到iret之间的主要代码分析:

SAVE_ALL:保存现场;

syscall_call:调用了系统调用处理函数;

restore all:恢复现场(因为系统调用处理函数也算是一种特殊的“中断”);syscallexitwork:同上一条i;

INTERRUPT RETURN:也就是iret,系统调用到此结束;

\arch\x86\kernel\traps.c中有一个函数,将SYSCALL_WECTOR(系统调用中断向量)和system_call汇编代码的入口绑定。完成初始化

简化汇编伪代码

Save_all保存现场

Sys_call_table:绑定系统调用函数

Interrupt_return:结束

韩玉琪同学总结得很到位,在此冒昧引用

系统调用就是特殊的一种中断

  1. 保存现场 在系统调用时,我们需要SAVE_ALL,用于保存系统调用时的上下文。 同样,中断处理的第一步应该也要保存中断程序现场。 目的:在中断处理完之后,可以返回到原来被中断的地方,在原有的运行环境下继续正确的执行下去。
  2. 确定中断信息 在系统调用时,我们需要将系统调用号通过eax传入,通过sys_call_table查询到调用的系统调用,然后跳转到相应的程序进行处理。
    同样,中断处理时系统也需要有一个中断号,通过检索中断向量表,了解中断的类型和设备。
  3. 处理中断 跳转到相应的中断处理程序后,对中断进行处理。
  4. 返回 系统调用时最后要restore_all恢复系统调用时的现场,并用iret返回用户态。 同样,执行完中断处理程序,内核也要执行特定指令序列,恢复中断时现场,并使得进程回到用户态。

linux内核分析第五周学习笔记的更多相关文章

  1. Linux内核分析——第五周学习笔记

    第五周 扒开系统调用的“三层皮”(下) 一.知识点总结 (一)给MenuOS增加time和time-asm命令 在实验楼中,首先 强制删除menu (rm menu -rf) 重新克隆一个新版本的me ...

  2. LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)

    LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...

  3. LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)

    LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...

  4. 《Linux内核分析》第一周学习笔记

    <Linux内核分析>第一周学习笔记 计算机是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...

  5. 《Linux内核分析》第二周学习笔记

    <Linux内核分析>第二周学习笔记 操作系统是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  6. Linux内核分析第三周学习笔记

    linux内核分析第三周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  7. Linux内核分析第五周学习总结——分析system_call中断处理过程

    Linux内核分析第五周学习总结--分析system_call中断处理过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  8. Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程

    Linux内核分析第六周学习笔记--分析Linux内核创建一个新进程的过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  9. Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序

    Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...

随机推荐

  1. saxbuilder用法

    xml为我们在网络交换数据带来很大方便,在java中可以使用saxbuilder来操作xml格式文件,下面介绍一下saxbuilder的常用方法. import org.jdom.Document; ...

  2. mac下idea 13 在tomcat 7控制台乱码

    在mac或linux下idea 13(可能其它版本也会出现乱码) tomcat 7在输出到控制台的日志中文乱码,解决方式 加一个environment variable, 在如图绿色位置添加   JA ...

  3. 使用vs2010编译lua5.1源代码生成lua.lib

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/37557807 一.打开vs2010 二 ...

  4. bat脚本,备份数据库并压缩

    forfiles /p "D:\DBBackup" /m "*.sql" /d -08 /c "cmd /c del @path"forfi ...

  5. Spring Boot 扩展点应用之工厂加载机制

    Spring 工厂加载机制,即 Spring Factories Loader,核心逻辑是使用 SpringFactoriesLoader 加载由用户实现的类,并配置在约定好的META-INF/spr ...

  6. apache-httpd工作模式

    [root@app1 conf]# ../bin/apachectl -lCompiled in modules: core.c mod_access.c mod_auth.c mod_include ...

  7. JS仿QQ空间鼠标停在长图片时候图片自动上下滚动效果

    JS仿QQ空间鼠标停在长图片时候图片自动上下滚动效果 今天是2014年第一篇博客是关于类似于我们的qq空间长图片展示效果,因为一张很长的图片不可能全部把他展示出来,所以外层用了一个容器给他一个高度,超 ...

  8. day29

    今日内容: 异常处理 元类介绍 元类(通过元类中的__init__方法,改变实例化获得的类) 元类(通过元类中的__call__方法,改变实例化获得的类实例化出来的对象) 1.异常处理: 什么是异常处 ...

  9. python_基础硬件知识

    通过学习这一篇章的内容,回顾了<数字逻辑><计算机组成原理><操作系统> 这几门课的相关知识 有时候,总是要了解一些基本,才能更容易理解程序 以下是我的一些听课记录 ...

  10. 2017-2018-2 《网络对抗技术》 20155319 第二周 Exp1 PC平台逆向破解(5)M

    2017-2018-2 <网络对抗技术> 20155319 第二周 Exp1 PC平台逆向破解(5)M 一.实践目标 1.1实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件 ...