week 5 实验:分析system_call中断处理过程
一、使用gdb跟踪分析一个系统调用内核函数(上周选择那一个系统调用)——getpid
复习视频:
如何实现?- 更新menu代码到最新版 - test.c中main函数里,增加MenuConfig() - 增加对应的两个函数,Time和TimeAsm - make rootfs 自动编译脚本
1.增加系统调用
- 先执行rm menu -rf,强制删除原有的menu文件夹,使用git命令更新menu代码至最新版
- test.c中main函数里,增加MenuConfig()
- 增加对应的两个函数,Getpid和GetpidAsm
- make rootfs
这一步之后会打开menu:
- 输入help,可以看到当前的系统调用:
可以看到,我自己写的getpid和getpid_asm已经加进去了,分别执行这两个系统调用:
成功。
2.使用gdb调试
这里需要注意的就是,因为当前是在menu目录下,而所需要的镜像文件不在这个目录下,这时需要使用全路径,不然的话就会出现像上面第二张图的错误。
给time处设置断点:
c运行之后,在MenuOs里使用time,可以看到它停了下来
list可以查看内部的函数,直到sys_time返回后进入汇编代码处理,gdb无法继续进行追踪
二、分析从system_call开始到iret结束之间的整个过程
三、系统调用处理过程总结
请走链接:=学习总结