zoukankan      html  css  js  c++  java
  • 《Linux内核分析》第五周:分析system_call中断处理过程

    实验

    分析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
    ",uid);
         return 0; 
    }
    

    gdb跟踪分析一个调用函数

    • 进入gdb调试

    • 设置断点

    • 结果

    • 设置断点在

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

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

    • 设置断点于system_call处

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

    system_call到iret过程流程图

  • 相关阅读:
    [SHOI2015]脑洞治疗仪
    [SDOI2016]数字配对
    [SDOI2019]快速查询
    [HNOI2019]JOJO
    [TJOI2019]甲苯先生和大中锋的字符串
    [CQOI2017]老C的方块
    [CQOI2017] 小Q的表格
    [SHOI2012] 火柴游戏
    板子
    自我介绍
  • 原文地址:https://www.cnblogs.com/yswysw/p/5303777.html
Copyright © 2011-2022 走看看