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结束之间的整个过程,并画出简要准确的流程图