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.rhkb.cn/news/197855.html

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

相关文章

qemu + busybox + 内核实验环境搭建(2023-11)

主要是参考网上的例子,网上的一些例子可能用的busybox 老旧,编译各种问题,以及rootfs hda的方式或者ramfs的方式。可能有些概念还是不清楚,以下是最终完成测试成功的案例。 下载kernel https://cdn.kernel.org/pub/linux/kernel…

坐标系下的运动旋量转换

坐标系下的运动旋量转换 文章目录 坐标系下的运动旋量转换前言一、运动旋量物体运动旋量空间运动旋量 二、伴随变换矩阵三、坐标系下运动旋量的转换四、力旋量五、总结参考资料 前言 对于刚体而言,其角速度可以写为 ω ^ θ ˙ \hat {\omega} \dot \theta ω^θ˙&…

【Synopsys Bug记录】DC综合报错(显示warning:Unable to resolve reference)

文章目录 一、问题描述二、问题所在三、问题解决总结4.1 Warning的产生4.2 代码风格4.3 网表正确性 一、问题描述 在综合一个SOC时,发现综合后的门级网表文件缺少了apb系统下的子模块的网表。该SOC已经成功在FPGA上运行了,按理说在设计上是没有问题的。在…

mac无法向移动硬盘拷贝文件怎么解决?不能读取移动硬盘文件怎么解决

有时候我们在使用mac的时候,会遇到一些问题,比如无法向移动硬盘拷贝文件或者不能读取移动硬盘文件。这些问题会给我们的工作和生活带来不便,所以我们需要找到原因和解决办法。本文将为你介绍mac无法向移动硬盘拷贝文件怎么回事,以…

AR贴纸特效SDK,无缝贴合的虚拟体验

增强现实(AR)技术已经成为了企业和个人开发者的新宠。它通过将虚拟元素与现实世界相结合,为用户提供了一种全新的交互体验。然而,如何将AR贴纸完美贴合在人脸的面部,同时支持多张人脸的检测和标点及特效添加&#xff0…

解决Kibana初始化失败报错: Unable to connect to Elasticsearch

现象: 原因: docker run生成容器的时候,指定elastic server时指向了localhost 为什么不能是localhost, 因为这个localhost指向的是容器本身的网络,而elastic用的是物理网络,两个网络是隔离的,所以如果kiba…

MySQL数据库索引以及使用唯一索引实现幂等性

📑前言 本文主要是MySQL数据库索引以及使用唯一索引实现幂等性的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &#x1f30…

【Go入门】 Go搭建一个Web服务器

【Go入门】 Go搭建一个Web服务器 前面小节已经介绍了Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由,静态文件&#xff0c…

YOLOv5 学习记录

文章目录 整体概况数据增强与前处理自适应Anchor的计算Lettorbox 架构SiLU激活函数YOLOv5改进点SSPF 模块 正负样本匹配损失函数 整体概况 YOLOv5 是一个基于 Anchor 的单阶段目标检测,其主要分为以下 5 个阶段: 1、输入端:Mosaic 数据增强、…

【Linux网络】典型NAS存储方式:NFS网络共享存储服务

一、关于存储的分类 二、NFS的介绍 nfs的相关介绍: 1、原理 2、nfs的特点 3、nfs软件学习 4、共享配置文件的书写格式 关于权限,学习: 5、关于命令的学习: 三、实验操作 1、nfs默认共享权限(服务端设置&#…

zookeeper的安装部署

目录 简介 Zookeeper架构设计及原理 1.Zookeeper定义 2.Zookeeper的特点 3.Zookeeper的基本架构 4.Zookeeper的工作原理 5.Zookeeper的数据模型 (1)临时节点 (2)顺序节点 (3)观察机制 Zookeeper集…

Web安全研究(五)

Automated WebAssembly Function Purpose Identification With Semantics-Aware Analysis WWW23 文章结构 introbackgroundsystem design abstraction genapplying abstractionsclassifier data collection and handling data acquisitionstatistics of collected datamodule-…

hypermesh常用快捷键

#hypermesh常用快捷键

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷A模块基础设施设置/安全加固(200分)A-1:登录安全加固(Windows, Linux)A-2&#…

DrugMAP: molecular atlas and pharma-information of all drugs学习

DrugMAP:所有药物的分子图谱和制药信息 - PMC (nih.gov) DrugMAP: the molecular atlas and pharma-information of drugs (idrblab.net) 构建了一个描述药物分子图谱和药物信息的新数据库(DrugMAP)。它提供了>30 000种药物/候选药物的相…

蓝桥杯每日一题2023.11.18

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 本题使用搜索,将每一个格子进行初始赋值方便确定是否为相邻的数,将空出的两个格子首先当作已经填好数值为100,此时从第一个格子右边的格子开始搜索&#xff…

python urllib open 头部信息错误

header 有些字符在 lighttpd server 中无法正常解析,需要转换 quteo 可以转换 就跨平台而言,Rust 和 python 一样优秀,看了在stm32 上使用 Rust 进行编程,从一定程度上,而言,稳定和安全性要比C 开发的好的多,说出来可能不信,在单片机上是可以对空指针进行…

map与set的封装

目录 红黑树的结点 与 红黑树的迭代器 红黑树的实现: 迭代器: ​编辑 红黑树的查找: 红黑树的插入: ​编辑 检查红色结点:​编辑红黑树的左旋 ​编辑红黑树的右旋 ​编辑红黑树的双旋 Map的封装 ​编辑set的…

AI实践与学习1_Milvus向量数据库实践与原理分析

前言 随着NLP预训练模型(大模型)以及多模态研究领域的发展,向量数据库被使用的越来越多。 在XOP亿级题库业务背景下,对于试题召回搜索单单靠着ES集群已经出现性能瓶颈,因此需要预研其他技术方案提高试题搜索召回率。…

[Linux] 网络文件共享服务

一、存储类型 存储类型可分为三类:DAS(直连式存储),NAS(网络附加存储),SAN(存储区域网络)。 1.1 DAS 定义: DAS是指直连存储,即直连存储,可以理解为本地文…