操作系统学习5 使用VirtualBox调试自己的引导程序
学习x86汇编语言5 使用VirtualBox调用引导程序一、 准备工具二、操作1. 查看安装的虚拟机2. 以调试模式启动三、调试控制台一些调试命令查看帮助查看内存反汇编其它常用命令四、命令行其它命令查看报告五、继续前面试验一、 准备工具上章完成的引导程序和磁盘镜像VirtualBOX二、操作1. 查看安装的虚拟机VBoxManage.exe list vms这个a是我上一章安装的镜像。2. 以调
·
操作系统学习5 使用VirtualBox调试自己的引导程序
一、 本章目标与准备工具
1. 本章实现目标
使用VirtualBOX的调试功能,加载上章的磁盘镜像、加载引导程序,并实现单步调试。
2. VirtualBOX单步调试功能介绍
VirtualBox 是一款由 Oracle 公司开发的免费开源虚拟化软件,它可以在各种操作系统上创建和运行虚拟机。
VirtualBox 提供了一个称为单步调试(Single Stepping)的功能,允许我们以单步方式执行虚拟机中的代码,一次执行一条指令,从而分析和调试虚拟机中的程序或操作系统。
3. 准备工具
- 上章完成磁盘镜像
- VirtualBOX
二、操作
1. 查看安装的虚拟机
VBoxManage.exe list vms
这个a是我上一章安装的镜像。
2. 以调试模式启动
VirtualBoxVm.exe --startvm "a" --debug-command-line
# 下面两个参数不是必须的
# -E VBOX_GUI_DBG_AUTO_SHOW=true -E VBOX_GUI_DBG_ENABLED=true
系统会停止在加载状态:
在下面的command可以输入调试指令。
三、调试控制台一些调试命令
1. 查看帮助
help --all
2. 查看内存
d 7c00
这时内存还没有内容:
3. 反汇编
u FFFF0
这是一条跳到bios区域的跳转指令。
u 7c00
我们的程序还没有加载进来。
4. 其它常用命令
- stop: 停止虚拟机并允许单步调试
- g:继续运行
- t:单步运行
- rg,rh, r:打印客户机 宿主机 和当前寄存器
- kg,kh,k:打印客户机 宿主机 和当前堆栈
- da,db,dw,dd,dq:打印内存,分别以ASCII,bytes,words,dwords 和 qwords格式
- u:反汇编
- dg:打印客户机DGT
- di:打印客户机 IDT
- dl:打印客户机 LDT
- dt:打印客户机 TSS
- dp*:打印客户机分页表格式
- bp , br:设置和取消断点
- bl:显示断点列表
- bc:清除断点
- writecore:把虚拟机内核镜像写到一个磁盘文件
- detect:测试虚拟机操作系统类型
- info:打印一些硬件信息,如cpu等
四、VirtualBOX 其它命令
查看报告
# 默认是生成一个压缩包
VBoxBugReport
# 文本方式输出
VBoxBugReport --text
# 指定虚拟机
VBoxBugReport a
五、继续前面试验
前面启动的虚拟机是暂停状态,到命令行让虚拟机继续运行:
VBoxManage.exe controlvm "a" resume
这里再看7c00区:
u 7c00
正是前一章编写的引导程序。
使用d命令看看字符串:
d 7c00
查看寄存器,这里显示的是32位寄存器:
r
eax,ebx,ecx等正是前面所赋的值。
多试几次,可以看到eip的值保持不变,程序在这里进入了死循环,单步调试的指令在这里就没有多大的测试意义了。
本文参考:
https://www.virtualbox.org/manual/ch12.html
更多推荐
已为社区贡献18条内容
所有评论(0)