20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

week 5 实验:分析system_call中断处理过程

一、使用gdb跟踪分析一个系统调用内核函数(上周选择那一个系统调用)——getpid

复习视频:

如何实现?

- 更新menu代码到最新版
- test.c中main函数里,增加MenuConfig()
- 增加对应的两个函数,Time和TimeAsm
- make rootfs 自动编译脚本

1.增加系统调用

  1. 先执行rm menu -rf,强制删除原有的menu文件夹,使用git命令更新menu代码至最新版

    20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结
  2. test.c中main函数里,增加MenuConfig()

    20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结
  3. 增加对应的两个函数,Getpid和GetpidAsm

    20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

    20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结
  4. make rootfs

    这一步之后会打开menu:

    20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结
  5. 输入help,可以看到当前的系统调用:

    20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

    可以看到,我自己写的getpid和getpid_asm已经加进去了,分别执行这两个系统调用:

    20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

    成功。

2.使用gdb调试

20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

这里需要注意的就是,因为当前是在menu目录下,而所需要的镜像文件不在这个目录下,这时需要使用全路径,不然的话就会出现像上面第二张图的错误。

给time处设置断点:

20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

c运行之后,在MenuOs里使用time,可以看到它停了下来

20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

list可以查看内部的函数,直到sys_time返回后进入汇编代码处理,gdb无法继续进行追踪

20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

二、分析从system_call开始到iret结束之间的整个过程

20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

三、系统调用处理过程总结

请走链接:=学习总结

上一篇:获取Linux进程运行在哪个CPU内核上面的方法


下一篇:PDF 补丁丁 0.6.2 测试版发布