MIB 6.S081 System calls(1)using gdb

难度:easy

In many cases, print statements will be sufficient to debug your kernel, but sometimes being able to single step through some assembly code or inspecting the variables on the stack is helpful.
To learn more about how to run GDB and the common issues that can arise when using GDB, check out this page.
To help you become familiar with gdb, run make qemu-gdb and then fire up gdb in another window (see the gdb bullet on the guidance page). Once you have two windows open, type in the gdb window.

在许多情况下,使用打印语句可能足以调试你的内核,但有时能够逐步执行一些汇编代码或检查堆栈上的变量会很有帮助。

通过实验了解有关如何运行 GDB 以及在使用 GDB 时可能出现的常见问题

 qemu虚拟机启动gdb调试模式

make qemu-gdb

该命令用于启动QEMU虚拟机并与GDB连接以进行调试的命令:

启动QEMU虚拟机:make qemu-gdb 命令启动了一个QEMU虚拟机实例。

(QEMU是一个开源的虚拟化工具,它可以模拟多种处理器体系结构,并在模拟环境中运行操作系统和应用程序。)
同时启用GDB调试模式,使得QEMU虚拟机处于可调试状态。
QEMU虚拟机启动,将等待GDB连接,以便执行调试操作。

在另一个相同目录下的终端输入:

$ gdb-multiarch -x .gdbinit

gdb-multiarch -x .gdbinit 这个命令的作用是使用多体系结构(multi-architecture)版本的GDB,同时执行一个包含GDB命令的脚本文件 .gdbinit。各个部分的含义如下:

gdb-multiarch:这是GDB的一个命令,表示启动多体系结构版本的GDB。多体系结构版本的GDB支持在不同的CPU架构上进行调试。

-x .gdbinit:这是一个选项,指示GDB在启动时执行指定的脚本文件 .gdbinit。

实验要求使用gdb回答几个问题

1. Looking at the backtrace output, which function called syscall?(哪一个函数是syscall)

为了找到问题答案,进入gdb后,在syscall处打一个断点

(gdb)  b syscall

一直运行到断点处。 

(gdb)c

使用layout src命令用于切换源代码窗格的布局。将GDB调试会话中的当前布局更改为源代码布局。在终端中显示源代码,并显示与调试相关的其他信息,如程序计数器(PC)位置、变量、断点等。

(gdb) layout src

使用backtrace追踪syscall调用过程。

(gdb)backtrace

在GDB中,backtrace命令用于打印当前调用堆栈的内容。它显示了当前被调用的函数以及调用链的信息,即从程序执行的起点到当前代码所处位置的函数调用路径。

了解程序的执行流程,显示了函数调用的顺序和每个函数被调用时的位置。这对于分析代码中的错误、找出程序崩溃的原因或者了解程序的执行路径非常有用。

可以看到usertrap()调用了syscall函数(问题1答案)

查看kernel/trap.c源代码可以得知usertrap()确实调用了syscall()

2. What is the value of p->trapframe->a7 and what does that value represent? (Hint: look user/initcode.S, the first user program xv6 starts.)

要想知道p->trapframe->a7的值,使用next到代码的行。可以看到p->trapframe->a7的值为7(问题2第一问答案)

(gdb)n

根据提示,去user/initcode.S查看7代表什么意思

没有什么有用的信息,去syscall.h继续查看

可以看到7是SYS_exec的意思。

所以num=7,表示接下来要运行系统调用。

What was the previous mode that the CPU was in?(CPU运行在什么模式?)

$sstatus 是一个寄存器名,它通常用于 RISC-V 架构的处理器,用于存储处理器状态信息。在这个例子中,p $sstatus 命令会打印 $sstatus 寄存器的当前值。

所以下面需要找sstatus标志位的含义。

查阅实验提供的riscv手册,可以看到sstatus的说明文档

https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf

SPP=0表示trap是来自用户模式,SPP=1表示trap来自监管模式。

由图4.2可以看出SPP在第8位,占1位。

0X22=0010 0010B,第8位表示0。所以,trap来自用户模式(问题3答案)

待续。。。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/195336.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统环境下mysql安装和基本命令学习

此篇文章为蓝桥云课--MySQL的学习记录 块引用部分为自己的实验部分,其余部分是课程自带的知识,链接如下: MySQL 基础课程_MySQL - 蓝桥云课 本课程为 SQL 基本语法及 MySQL 基本操作的实验,理论内容较少,动手实践多&am…

云课五分钟-0Cg++默认版本和升级-std=c++17

前篇: 云课五分钟-0B快速排序C示例代码-注释和编译指令 视频: 云课五分钟-0Cg默认版本和升级-stdc17 文本: 在Linux系统中,可以通过以下步骤升级g: 打开终端,使用root权限或者sudo权限登录。输入以下命令…

Linux操作文件的底层系统调用

目录 1.概述 2.open的介绍 3.write 的介绍 4.read 5.close的介绍 6.文件描述符 1.概述 C语言操作文件的几个库函数:fopen,fread,fwrite,fclose; 系统调用:open,read,write,close; 系统调用方法实现在内核中;(陷入内核,切换到内核) 2.open的介绍 open重载:两个参数用于打…

Android图片涂鸦,Kotlin(1)

Android图片涂鸦,Kotlin(1) import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.PointF import android.…

用GPT 搭建一个占星术、解梦、塔罗牌占卜和命理学服务

今天来尝试我们的占星术、解梦、塔罗牌占卜和命理学服务,揭开宇宙的奥秘并获得自我认识 聊天 GPT API 集成的 HTML5 模板。我们的目标是提供易于使用且高度可定制的 API 代码,使您能够训练自己的人工智能解决方案并将其添加到提示中。 我们的产品是可定…

蓝桥杯每日一题2023.11.19

题目描述 “蓝桥杯”练习系统 (lanqiao.cn) 题目分析 首先想到的方法为dfs去寻找每一个数&#xff0c;但发现会有超时 #include<bits/stdc.h> using namespace std; const int N 2e5 10; int n, cnt, a[N]; void dfs(int dep, int sum, int start) {if(dep 4){if(s…

数据结构:红黑树的插入实现(C++)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 一、红黑树二、红黑树的插入三、代码实现总结 一、红黑树 红黑树的概念&#xff1a; 红黑树是一颗二叉搜索树&#xff0c;但在每个节点上增加一个存储位表示节点的颜色&…

redis三种集群方式

redis有三种集群方式&#xff1a;主从复制&#xff0c;哨兵模式和集群。 1.主从复制 主从复制原理&#xff1a; 从服务器连接主服务器&#xff0c;发送SYNC命令&#xff1b; 主服务器接收到SYNC命名后&#xff0c;开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所…

【Java 进阶篇】JQuery 事件绑定之事件切换:让页面动起来

欢迎来到这个充满动感的 JQuery 事件绑定之旅&#xff01;在这篇博客中&#xff0c;我们将深入研究 JQuery 中的事件切换&#xff0c;让你的页面焕发出活力和互动。无论你是前端小白还是有一定经验的开发者&#xff0c;相信这篇文章都会对你有所帮助。 走进事件切换的奇妙世界…

【NI-DAQmx入门】校准

1.设备定期校准的理由 随着时间的推移电子器件的特性会发生自然漂移&#xff0c;可能会导致测量结果的不准确性。防止出现良品和差品筛选出错的情况满足行业国际标准降低设备出现故障的风险使测量结果更具备参考性 2.查找NI设备的校准间隔。 定期校准会使DAQ设备的精度保持在…

电路的基本原理

文章目录 一、算数逻辑单元(ALU)1、功能2、组成 二、电路基本知识1、逻辑运算2、复合逻辑 三、加法器实现1、一位加法器2、串行加法器3、并行加法器 一、算数逻辑单元(ALU) 1、功能 算术运算&#xff1a;加、减、乘、除等 逻辑运算&#xff1a;与、或、非、异或等 辅助功能&am…

设计模式常见面试题

简单梳理下二十三种设计模式&#xff0c;在使用设计模式的时候&#xff0c;不仅要对其分类了然于胸&#xff0c;还要了解每个设计模式的应用场景、设计与实现&#xff0c;以及其优缺点。同时&#xff0c;还要能区分功能相近的设计模式&#xff0c;避免出现误用的情况。 什么是…