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

时间:2023-11-10 15:16:02

实验内容:

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

2.使用git命令 git clone https://github.com/mengning/menu.git 克隆新的menuLinux内核及分析 第五周 扒开系统调用的三层皮(下)

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

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

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

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

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

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

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

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

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

系统调用是一种中断:

1. 保存现场

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

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

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

2. 确定中断信息

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

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

3. 处理中断

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

4. 返回

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

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

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

作者: 王雪铖

原创作品转载请注明出处

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