Bochs调试指令

Posted chengmf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bochs调试指令相关的知识,希望对你有一定的参考价值。

??Bochs就像一台真机一样,处理器在加电之后,要开始取指令并执行指令。
技术图片

jmpf f000:e05b  ;转移目标位置ROM-Bios

??如图在左侧显示了该指令所在的物理内存地址 0x0000fffffff0

??但为什么是0x0000fffffff0?因为和8086不同,现代处理器在加电时,段寄存器CS的内容为,0xF000,指令指针寄存器IP的内容为0xFFF0,这就使得处理器地址线的低20位同样是0xFFFF0。在刚启动时,处理器将其余(高位部分)的地址线强制为高电平。因为当前Bochs虚拟机的地址线是32根,所以,初始发出的物理内存地址就是0x0000fffffff0了。

单步执行命令s(stop)

??Bochs执行一条指令,然后停下来,同时显示下一条将要执行地指令。
技术图片
??注意,物理地址变了。现代的x86处理器在加电后,所有高端的地址线都被强制为高电平,直至遇到并执行了第一个段间转移指令。

n 指令

??单步执行有一个缺点,就是会陷入同一条指令地多次重复执行里,这时用n命令,Bochs将自动完成循环过程,并在循环体外地下一条指令前停住。
技术图片

反汇编命令u

??反汇编地意思是根据机器指令代码生成可读地汇编语言指令,正好与汇编过程相反。u 命令可以使用两个参数,第一个参数是跟在 / 后面地数字,指定返汇编出多少条指令;第二条参数用于指定一个内存地址,Bochs从这里开始反汇编操作。
技术图片

断点指令 b(break)

??就是事先设置一个(物理)内存地址,当处理器执行到这个地址时,就自动停下来了。然后再输入命令 c(continue) 是持续执行的意思,该命令要求处理器不间断地持续执行指令。
技术图片

r(register)

??显示通用寄存器地内容
技术图片

sreg(segment register)

??显示段寄存器地内容
技术图片

xp(eXamine memory at Physical address)

??即,显示指定物理内存地址处地内容。xp命令每次只显示一个双子。要是显示多个双字,需要用 / 附加一个数据量。然后,还应当指定一个物理内存地址。
技术图片

info eflags

??用于显示标志寄存器地状态,如果标志寄存器名称是小写,说明该标志为0;否者该标志状态为1。
技术图片

q(quit)

??退出Bochs调试过程
技术图片

以上是关于Bochs调试指令的主要内容,如果未能解决你的问题,请参考以下文章

Bochs调试Linux内核6 - 启动过程调试 - 跳到bootsect引导程序执行

bochs调试linux内核学习4 - bochs配置文件的$BXSHARE变量bochs的System BIOS must end at 0xfffff错误运行内核0.00版本

Bochs调试之查看内存

Bochs调试Linux内核 - 定位内核中的变量或数据结构

Bochs调试Linux内核初步学习 - 3

Bochs在 Bochs 中运行 Linux 0.1x 系统