实验

分析system_call中断处理过程

  1. 使用gdb跟踪分析一个系统调用内核函数(您上周选择那一个系统调用),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl ,推荐在实验楼Linux虚拟机环境下完成实验。
  2. 根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图,撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下:
    • 题目自拟,内容围绕系统调用system_call的处理过程进行;
    • 博客内容中需要仔细分析system_call对应的汇编代码的工作过程,特别注意系统调用返回iret之前的进程调度时机等。
    • 总结部分需要阐明自己对“系统调用处理过程”的理解,进一步推广到一般的中断处理过程。

代码

getuid.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char const *agrv[])
{
uid_t uid;
uid=getuid();
printf("The current user ID:%d\n",uid);
return 0;
}

gdb跟踪分析一个调用函数

  • 进入gdb调试

  • 设置断点

  • 结果

  • 设置断点在

  • 结果:发现执行命令getuid时并没有停下,反而在执行getuid_asm时停下了

  • 单步执行,返回了进程调度中的一个当前进程任务的值。

  • 设置断点于system_call处

    发现可停,而继续执行时,刚才停下的getuid_asm也返回了值:

system_call到iret过程流程图

最新文章

  1. ZK 页面间参数传递
  2. 如何隐藏DOM元素
  3. 精品资源:40个实用的 PSD 贴纸模板《下篇》
  4. Integer与int的种种比较你知道多少?
  5. linq to entity 获取项的集合总数
  6. 手机软件mockup设计工具
  7. WebKit内核分析之Page
  8. kafka常用操作命令
  9. 一个快速查看API的汇编和机器码的工具.发布源码
  10. WebActivatorEx
  11. nginx Location配置总结(转)
  12. php本页面调试报错配置
  13. JAVA多线程之先行发生原则
  14. Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行
  15. python对象属性管理(2):property管理属性
  16. Android之Fragment(碎片)方方面面
  17. 通过全备+binlog_server同步恢复被drop的库或表
  18. matlab与示波器连接及电脑连接
  19. 微信小程序开发——小程序分享转发
  20. Centos PS1

热门文章

  1. java多重转型问题
  2. 怎样自适应ios设备大小
  3. [luogu2172] 部落战争
  4. 开源http协议库curl和wget的区别和使用
  5. Python3.6使用Pyqt5编写GUI程序
  6. ICC2 常用命令
  7. CentOS虚拟机如何设置共享文件夹,并在Windows下映射网络驱动器?
  8. ASP.NET Core中,UseDeveloperExceptionPage扩展方法会吃掉异常
  9. ORACLE官网下载登陆账号能够使用
  10. SelectObject函数