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

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

张忻(原创作品转载请注明出处)

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

一、知识概要

(一)给MenuOS增加time和time-asm命令

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

(三)系统调用在内核代码中的工作机制和初始化

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

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

  3. 简单浏览system_call和iret之间的主要代码

二、学习笔记

(一)给MenuOS增加time和time-asm命令

  1.更新menu代码到最新版本

 

 

  2.在main函数中增加MenuConfig

 

 

  3.增加对应的函数

 

 

 

 

  4.make rootfs

 

 

 

(二)使用gdb跟踪系统调用内核函数sys_time(具体过程见作业)

(三)系统调用在内核代码中的工作机制和初始化

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

系统调用机制的初始化

 \init\main.c start_kernel  
trap_init();

\arch\x86\kernel\traps.c 
#ifdef CONFIG_X86_32  
set_system_trap_gate(SYSCALL_VECTOR, &system_call);  
set_bit(SYSCALL_VECTOR, used_vectors);
#endif

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

 

保存返回值,在退出之前有函数,否则restore all然后返回用户态。

简化后的伪代码:

  3. 简单浏览system_call和iret之间的主要代码

三、课后作业

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

加载Linux内核符号表:

设置断点:

在sys_fork函数处设置断点:

列出执行的位置:

单步调试:

(二)根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图

 

posted @ 2016-03-23 22:16  xixixixixi  阅读(305)  评论(2)    收藏  举报