实验作业:使gdb跟踪分析一个系统调用内核函数(我使用的是getuid)

20135313吴子怡.北京电子科技学院

【第一部分】 根据视频演示的步骤,先做第一部分,步骤如下

①更新menu代码到最新版

②在代码中加入C函数、汇编函数

③在main函数中加入makeconfig

④make rootfs

⑤可以看到qemu中增加了我们先前添加的命令:

⑥分别执行新增的命令

【第二部分】gdb跟踪分析一个系统调用内核函数

①进入gdb调试

②设置断点,继续执行:

③相对应的得到这样的结果:

④查看我所选用的系统调用的函数:

⑤设置断点在sys_getuid16处:

⑥发现执行命令getuid时并没有停下

⑦反而在执行getuid_asm时停下了

⑧直接结束若干次单步执行,然后继续往下单步执行,发现出现了进程调度函数,返回了进程调度中的一个当前进程任务的值。

⑨设置断点于system_call处。发现可停,而继续执行时,刚才停下的getuid_asm也返回了值。

注意:视频中提及:system_call不是一个正常的函数,分析较有难度,老师作业中并没有要求,也没有布置为作业。因此于此处截止。

【第三部分】system_call到iret过程流程图

【第四部分】遇到的问题

在视频中讲解时:当在qemu中输入time时,在设置断点的前提下是会停下的。而我的操作中,输入getuid没有停下,而是在getuid_asm时停下了。这不知道为啥,反复做了好多次还是没解决。甚至重头开始做也还是一样。

已解决的问题:

1.目录很重要!!!!由于很多命令乱用路径,导致做到后面的时候才发现克隆位置出错、编译位置找不到文件等等问题!这种问题不用ls或者不返回去看视频很难发现!因此细心很重要!!!!!target remote连接超时也是很大原因是目录不对!还有gdb开始的位置不对,没有进入到LinuxKernel里面。

【第五部分】博客内容细节

(分析system_call对应的汇编代码的工作过程,系统调用返回iret之前的进程调度时机)

知识点总结请走链接:点我!

【第六部分】总结

“系统调用处理过程及到中断处理过程的推广”

具体的系统调用与系统调用号绑定,然后都记载在一个系统调用表内,每次使用系统调用时都是通过这样的绑定关系,由系统调用号去找系统调用表然后查找到所对应的系统调用的位置。

同理,中断处理过程也是一样的,它也是经由中断向量号作为索引去查表,然后执行相应的具体的中断处理程序去处理中断。

简而言之就是“两个号&两张表”。

【第七部分】附录

作者:吴子怡

学号:20135313

原创作品转载请注明出处

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

实验作业:使gdb跟踪分析一个系统调用内核函数的更多相关文章

  1. linux内核分析作业3:跟踪分析Linux内核的启动过程

    内核源码目录 1. arch:录下x86重点关注 2. init:目录下main.c中的start_kernel是启动内核的起点 3. ipc:进程间通信的目录 实验 使用实验楼的虚拟机打开shell ...

  2. 第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)

    目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的  (3) 分析stext函数如何启动内核:  (3.1) ...

  3. 《Linux内核分析》 week4作业-使用嵌入式汇编调用一个系统调用

    一.fork的嵌入式汇编执行 #include <stdio.h> #include <unistd.h> int main(){ pid_t pid; asm volatil ...

  4. 实验三:gdb跟踪调试内核从start_kernel到init进程启动

    原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 ...

  5. Linux内核实验作业七

    实验作业:Linux内核如何装载和启动一个可执行程序 20135313吴子怡.北京电子科技学院 [第一部分]理解编译链接的过程和ELF可执行文件格式 1.编译链接的过程 2.ELF可执行文件格式 一个 ...

  6. linux内核分析 第八周 理解进程调度时机跟踪分析进程调度与进程切换的过程

    笔记: 实验:使用gdb跟踪分析一个schedule()函数

  7. 20135202闫佳歆--week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程--实验及总结

    week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程 1.环境搭建: rm menu -rf git clone https://github.com/megnning/menu.gi ...

  8. Linux内核分析--理解进程调度时机、跟踪分析进程调度和进程切换的过程

    ID:fuchen1994 姓名:江军 作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否 ...

  9. Linux内核实验作业六

    实验作业:分析Linux内核创建一个新进程的过程 20135313吴子怡.北京电子科技学院 [第一部分]阅读理解task_struct数据结构 1.进程是计算机中已运行程序的实体.在面向线程设计的系统 ...

随机推荐

  1. [CTSC2018]混合果汁

    题目连接:https://www.luogu.org/problemnew/show/P4602 因为题中说是让最小值最大,所以自然想到二分答案.对于每一个二分的值,判断是否合法,若合法,在右区间二分 ...

  2. java任务调度框架

    https://www.ibm.com/developerworks/cn/java/j-lo-taskschedule/

  3. MSMQ消息队列总结

    1.总体介绍: http://www.cnblogs.com/beniao/archive/2008/06/26/1229934.html 2.windows服务各项参数介绍及安装 https://w ...

  4. kubernetes 资源请求和限制

    1. spec:      containers:        - name: example          resources:            requests:            ...

  5. group by having 和where区别联系

    原文参考:http://www.51ou.com/browse/msyql/43081.html having 和 where 参考 http://blog.csdn.net/yexudengzhid ...

  6. Android应用安全之第三方SDK安全

    第三方sdk的包括广告.支付.统计.社交.推送,地图等类别,是广告商.支付公司.社交.推送平台,地图服务商等第三方服务公司为了便于应用开发人员使用其提供的服务而开发的工具包,封装了一些复杂的逻辑实现以 ...

  7. 关于Trie的一些算法

    最近学习了一下关于Trie的一些姿势,感觉很实用. 终于不用每次看到字符串判重等操作就只想到hash了 关于Trie的定义,来自百度百科 在计算机科学中,Trie,又称前缀树或字典树,是一种有序树状的 ...

  8. WordPress留言本插件推荐

    WordPress不借助于任何插件也可以做个留言本,那就是建个 Page, 直接使用它的评论功能即可,而且给评论加上 Ajax 功能.WYSIWYG.引用.回复.留言分页等功能也可以做的很漂亮.但对于 ...

  9. Caffe上手教程

    Caffe上手教程 入门系列FAQ72 在Unbuntu上安装Caffe828 Windows下安装Caffe1.4K Caffe框架上手教程1.2K Caffe编译运行调试462 Caffe 电脑配 ...

  10. angularJs 技巧总结及最佳实践

    强烈建议通读官方wiki文档,里面包含了FAQ,最佳实践,深入理解最核心的Directive及Scope等文章, 基础 1. 使用ng-repeat指令,为防止重复值发生的错误.加上track by ...