一步步编写操作系统 20 x86虚拟bochs一般用法 上

bochs一般用法

bochs是一个开源x86 虚拟机软件。在它的实现中定义了各种数据结构来模拟硬件,用软件模拟硬件缺点是速度比较慢,毕竟全是软件来模拟,您想,虚拟机还要在软件中模拟各种中断,能不慢吗。不过它的功能非常强大,咱们应该感激bochs开发人员所做的贡献,真的不能抱怨,有的用就不错了是不^-^。其优点是可移植性强,原则上只要gcc支持某个平台,这个平台上就可以有bochs,从而保证了bochs在各平台上的畅通无阻。由于它是虚拟机,所以支持硬件级别上的调试。

bochs的硬件调试体现在:

  1. 1.调试时可以查看页表、gdt、idt等数据结构
  2. 2.可以查看栈中数据。
  3. 3.可以反汇编任意内存。
  4. 4.实模式、保护模式互相变换时提醒。
  5. 5.中断发生时提醒。

这种在硬件级别上的调试给我们提供了更大的灵活性,以后您会发现,这种硬件调试有时候会帮我们大忙。

好在bochs的调试风格是参照gdb来设计的,这对于习惯gdb调试的同学无疑减少了学习成本,不熟悉gdb调试器的同学也不必感到沮丧,我们常用的调试命令并不多,而且bochs的调试方法做得很人性化,发挥一下想像力也能摸索个所以然来。本书中使用的bochs版本是2.6.2,以下就此版本对bochs的使用做大致介绍。

闲话少说,咱们先进入bochs,看看大概有哪些内容。如图

第一行ls命令后,显示的是我安装的bochs下的文件,bin和share这两个目录是bochs安装时创建的,bochs.out是bochs运行过程中的日志文件,它是在配置文件中指定的,而在本例中,bochs的配置文件是bochsrc.disk。hd60M.img是用bin/bximage命令创建出来的虚拟硬盘,它也需要在bochsrc.disk中指定后才能使用。

第二行是启动bochs。由于我们的配置文件并不是这三个标准名称:.bochsrc、bochsrc、bochsrc.txt,所以我们需要用-f来指定我们的配置在哪里。其实用-f来指定是有好处的,这样我们清晰的知道哪个才是我们的配置。

如图3-16,进入bochs后,我们要确定下一步做什么,由于bochs已经将选项[6]做为默认的行为,这里直接回车就好了

像很多提供控制台的软件一样,直接键入help会显示帮助信息。进入bochs后,键入命令help后回车,看看bochs给我们准备了什么礼物。Help命令的输出如图:

根据第二行的提示,“help+命令”,可以显示命令的简短描述信息。那咱们就试一下。

在“cpu and memory contents”类中,有x、xp命令。这两个命令是用来查看内存的,它们的区别是,x命令后接线性地址,xp命令是后接physical物理地址。在目前的实模式中,只能通过物理地址来查看内存,先看看xp命令是怎么用的,一会咱们用xp命令来做个测试。键入help xp回车,如图

说明一下,bochs中用到的“字”并不是2字节,而是4字节。在图3-17的倒数第4行,提示用b,h,w,g来选择一个“显示单元”的大小。如b是指一字节。h是指半个字,2个字节。w是指一个字,4个字节。g是指双字,8字节。用xp或x指令查看内容是以“显示单元”为单位,不是以字节。所以如果不指定数据单位大小,默认是以4字节为单位来显示。如xp 0x7c00,将显示从0x7c00开始的4个字节。

bochs中支持8进制,10进制,16进制的数字。8进制按照以0开头的写法即可,10进制自然不用多说,对于16进制却有点限制,只支持0x前缀的形式,不支持h后缀的形式。如:

8进制:011

10进制:11

16进制:0x11

在咱们调试过程中最常用的还是16进制,它的每一位直接和字节中的每4位对应,观察起来还是较方便一些。

继续看xp指令“xp /nuf <addr>”,nuf是指一个数字序列,这是三个参数,n用来分别指定要显示的“显示单元”数,u指“显示单元”大小,f是指要用哪种进制显示。最终要显示几个字节,是以“显示单元大小u*显示单元个数n”来决定的。addr可以是以上三种进制的数字。即使不明白,看着有点晕也没有关系,后面我们还会对此命令继说。

图中尝试了用b和w来显示内存,大家可以看出,指定了显示单元后,以后的输出就以此显示单元为准,不会自动恢复为默认的4字节。

此处的0x7c00是空值0,这是因为MBR还没有被加载到此地址,MBR是由bios来加载的,bios目前还没有运行呢。

先到这里,【再续】

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

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

相关文章

2.3)深度学习笔记:超参数调试、Batch正则化和程序框架

目录 1&#xff09;Tuning Process 2&#xff09;Using an appropriate scale to pick hyperparameters 3&#xff09;Hyperparameters tuning in practice: Pandas vs. Caviar 4&#xff09;Normalizing activations in a network&#xff08;重点&#xff09; 5&#xf…

2.深度学习练习:Logistic Regression with a Neural Network mindset

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ You will learn to: Build the general architecture of a learning algorithm, including: Initializing para…

JVM内存区域详解

Java中虚拟机在执行Java程序的过程中会将它所管理的内存区域划分为若干不同的数据区域。下面来介绍几个运行时数据区域。 一、程序计数器 1.1 简述 程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它的作用可以看做是当前线程所…

3.深度学习练习:Planar data classification with one hidden layer

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ You will learn to: Implement a 2-class classification neural network with a single hidden layerUse unit…

一步步编写操作系统 11 实模式下程序分段的原因

cpu中本来是没有实模式这一称呼的&#xff0c;是因为有了保护模式后&#xff0c;为了将老的模式区别开来&#xff0c;所以称老的模式为实模式。这情况就像所有同学坐在同一个教室里&#xff0c;本来没有老同学这一概念&#xff0c;但某天老师领着一个陌生人进入教室并和大家宣布…

4.深度学习练习:Building your Deep Neural Network: Step by Step(强烈推荐)

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ fter this assignment you will be able to: Use non-linear units like ReLU to improve your modelBuild a d…

一步步编写操作系统21 x86虚拟机bochs 跟踪bios

为了让大家更好的理解bios是怎样被执行的&#xff0c;也就是计算机中第一个软件是怎样开始的&#xff0c;咱们还是先看下图3-17。在图的上面第5行&#xff0c;显示的是下一条待执行的指令&#xff0c;这是程序计数器&#xff08;PC&#xff09;中的值&#xff0c;在x86上的程序…

【CodeForces - 361D】Levko and Array (二分,dp)

题干&#xff1a; Levko has an array that consists of integers: a1, a2, ... , an. But he doesn’t like this array at all. Levko thinks that the beauty of the array a directly depends on value c(a), which can be calculated by the formula: The less value…

5.深度学习练习:Deep Neural Network for Image Classification: Application

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ After this assignment you will be able to: Build and apply a deep neural network to supervised learning…

【CodeForces - 689D】Friends and Subsequences(RMQ,二分 或单调队列)

题干&#xff1a; Mike and !Mike are old childhood rivals, they are opposite in everything they do, except programming. Today they have a problem they cannot solve on their own, but together (with you) — who knows? Every one of them has an integer seque…

6.深度学习练习:Initialization

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ 目录 1 - Neural Network model 2 - Zero initialization 3 - Random initialization&#xff08;掌握&…

【CodeForces - 602D】Lipshitz Sequence(思维,单调栈,斜率单调性)

题干&#xff1a; A function is called Lipschitz continuous if there is a real constant Ksuch that the inequality |f(x) - f(y)| ≤ K|x - y| holds for all . Well deal with a more... discrete version of this term. For an array , we define its Lipschi…

7.深度学习练习:Regularization

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ 目录 1-Package 2 - Non-regularized model 3 - L2 Regularization&#xff08;掌握&#xff09; 4-Dropou…

深入详解JVM内存模型与JVM参数详细配置

本系列会持续更新。 JVM基本是BAT面试必考的内容&#xff0c;今天我们先从JVM内存模型开启详解整个JVM系列&#xff0c;希望看完整个系列后&#xff0c;可以轻松通过BAT关于JVM的考核。 BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾回收算法 3.JVM垃圾回收器 4.JVM参数详解 5…

8.深度学习练习:Gradient Checking

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ 目录 1) How does gradient checking work? 2) 1-dimensional gradient checking 3) N-dimensional gradie…

9.深度学习练习:Optimization Methods

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ 目录 1 - Gradient Descent 2 - Mini-Batch Gradient descent 3 - Momentum 4 - Adam 5 - Model with dif…

一步步编写操作系统 22 硬盘操作方法

硬盘中的指令很多&#xff0c;各指令的用法也不同。有的指令直接往command寄存器中写就行了&#xff0c;有的还要在feature寄存器中写入参数&#xff0c;最权威的方法还是要去参考ATA手册。由于本书中用到的都是简单的指令&#xff0c;所以对此抽象出一些公共的步骤仅供参考之用…

10.深度学习练习:Convolutional Neural Networks: Step by Step(强烈推荐)

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ 目录 1 - Packages 2 - Outline of the Assignment 3 - Convolutional Neural Networks 3.1 - Zero-Paddin…

一步步编写操作系统 23 重写主引导记录mbr

本节我们在之前MBR的基础上&#xff0c;做个稍微大一点的改进&#xff0c;经过这个改进后&#xff0c;我们的MBR可以读取硬盘。听上去这可是个大“手术”呢&#xff0c;我们要将之前学过的知识都用上啦。其实没那么大啦&#xff0c;就是加了个读写磁盘的函数而已&#xff0c;哈…

11.深度学习练习:Keras tutorial - the Happy House(推荐)

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ Welcome to the first assignment of week 2. In this assignment, you will: Learn to use Keras, a high-lev…