ucore-lab1-练习2report
练习二实验报告
1.从CPU加电后执行的第一条指令开始,单步跟踪BIOS:
1.1默认的gdb需要进行一些额外的配置才能进行qemu的调试任务,qemu和gdb之间使用网络端口1234进行通信。
lab1/tools/gdbinit的内容如下。可见,这里是对内核代码进行调试,并且将断点设置在内核代码的入口地址,即kern_init函数:
为了从CPU加电后执行的第一条指令开始调试,修改lab1/tools/gdbinit,内容为:
1.2 通过上一个步骤gdb可以连接qemu,此时qemu会进入停止状态,听从gdb的命令。另外,可能需要qemu在一开始便进入等待模式,则不再使用make qemu开始系统的运行,而使用make debug来完成这项工作,并且将gdbinit中的‘continue’指令删掉。这样qemu便不会在gdb未连接的时候擅自运行了。在lab1目录下执行’make debug’ :
然后弹出qemu和debug窗口(在Makefile文件中定义):
但我这里在本应该显示反汇编代码的地方显示为‘??’,在网上查了之后觉得可能的原因是qemu和gdb不兼容,解决办法是在gdb中添加:
该命令可以强制反汇编当前ip所指向的指令,效果如下:
使用si指令单步执行一条机器指令,实现单步跟踪BIOS:
2.在初始化位置0x7c00设置实地址断点,测试断点正常:
在gdb中输入:‘b *0x7c00’ //设置断点
’c‘ //继续正在调试的程序
可以看到程序运行到0x7c00处停下来,并显示当ip指向的汇编指令--’cli‘。
3.从0x7c00开始跟踪代码运行,将单步跟踪反汇编得到的代码与bootasm.S和bootblock.asm进行比较:
在断点0x7c00处多次执行’x /10i $pc’ //查看后面10条汇编指令
发现在执行’bootmain‘之前的指令与bootasm.S和bootblock.asm中的指令一致。
4.自己找一个bootloader或内核中的代码位置,设置断点并进行测试:
4.1将gdbinit改成原来的命令,即对内核代码进行调试,并且将断点设置在内核代码的入口地址,即kern_init函数;
4.2执行’make debug‘; //程序进入init.c中的kern_init()
4.3‘b cons_init’ //设置断点,这是初始化console的函数
’c‘ //继续执行正在调试的程序
4.4遇到断点,在console.c程序的cons_init()函数处终止:
ucore-lab1-练习2report的更多相关文章
- 《ucore lab1》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 练习1:理解通过make生成执行文件的过程 详见<ucore lab1 exercise1>实验报告 练习2:使用qemu执行并调试 ...
- ucore lab1 bootloader学习笔记
---恢复内容开始--- 开机流程回忆 以Intel 80386为例,计算机加电后,CPU从物理地址0xFFFFFFF0(由初始化的CS:EIP确定,此时CS和IP的值分别是0xF000和0xFFF0 ...
- 《ucore lab1 exercise5》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 题目:实现函数调用堆栈跟踪函数 我们需要在lab1中完成kdebug.c中函数print_stackframe的实现,可以通过函数print_s ...
- 《ucore lab1 exercise3》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 题目:分析bootloader进入保护模式的过程 BIOS将通过读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行bootloader.请分 ...
- 《ucore lab1 exercise2》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 题目:使用qemu执行并调试lab1中的软件 为了熟悉使用qemu和gdb进行的调试工作,我们进行如下的小练习: 从CPU加电后执行的第一条指令 ...
- 《ucore lab1 exercise1》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 题目:理解通过make生成执行文件的过程 列出本实验各练习中对应的OS原理的知识点,并说明本实验中的实现部分如何对应和体现了原理中的基本概念和关 ...
- ucore操作系统学习笔记(一) ucore lab1系统启动流程分析
一.ucore操作系统介绍 操作系统作为一个基础系统软件,对下控制硬件(cpu.内存.磁盘网卡等外设),屏蔽了底层复杂多样的硬件差异:对上则提供封装良好的应用程序接口,简化应用程序开发者的使用难度.站 ...
- Ucore lab1实验报告
练习一 Makefile 1.1 OS镜像文件ucore.img 是如何一步步生成的? + cc kern/init/init.c + cc kern/libs/readline.c + cc ker ...
- ucore lab1练习2 qemu+gdb 不能协作调试的问题make lab1-mon
本练习是qemu结合gdb调试,但是我做实验的时候并不能像视频输入make lab1-mon那样顺利调试,期间有各种error,后来我找到原因,请看解决方法. 请先把ucore_lab文件删除,以下全 ...
- 《ucore lab1 exercise4》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 题目:分析bootloader加载ELF格式的OS的过程 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代 ...
随机推荐
- 关于 version control
1.什么是 version control 版本控制(Vevision control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程.此外,版本控制也是一种软体工程技巧,借此能在软体 ...
- 【Flex】自定义组件学习
文件列表 主文件: index.mxml 自定义组件 components.mylogo.mxml 图img a.jpg 2 mylogo.mxml <s:Group xmlns:fx=&q ...
- ubuntu(更新所有软件[可更新])终端命令
转载自https://blog.csdn.net/quite_cgy/article/details/70312034 (1)输入命令 (2)执行效果(由于已经更新完毕,因此显示所有软件包均为最新,否 ...
- ARP 欺骗攻击与防御
<一> ARP攻防 理论 和 工具 工具: 01: Wireshark ( 抓包软件 ) 02: P2P终结者 ( ARP欺骗工具 ) 03: cain & abel ( ...
- 用递归方法计算斐波那契数列第n项的和
参考: https://blog.csdn.net/xuzhangze/article/details/78568702 波那契数列数列从第3项开始,每一项都等于前两项之和.即 第n项的值为 (n- ...
- golang redis集群操作:redis-go-cluster
背景 感觉redis-cli desktop及其难用,最近用golang做了个redis查询工具,支持单例和集群操作,终于不再卡顿!!! 用到的包 "github.com/garyburd/ ...
- WPF中TextBox文件拖放问题
在WPF中,当我们尝试向TextBox中拖放文件,从而获取其路径时,往往无法成功(拖放文字可以成功).造成这种原因关键是WPF的TextBox对拖放事件处理机制的不同,具体可参考这篇文章Textbox ...
- day22-类的多态
一.多态 多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”.所谓多态:调用的方法是同一个,但是执行的代码或者说现象不一样,此时就称为多态 #我们编写了名为Animal ...
- Linux swap 使用
使用的背景 内存吃紧的时候可以考虑使用swap. swap新增 http://www.cnblogs.com/wuxie1989/p/5888595.html swap 使用 https://www. ...
- Java基础之用记事本编辑java代码运行,并且打成jar包后运行
使用记事本写java代码 1.在d盘新建一个记事本,名字叫做zhanzhuang.java,会询问不可用,是否继续,点击是 2.在里面编辑就如下内容,注意文件的名字要和 class 后面的名字相对应 ...