学习x86汇编语言5 使用VirtualBox调试自己的引导程序

学习x86汇编语言5 使用VirtualBox调试自己的引导程序

  • 一、 准备工具
  • 二、操作
    • 1. 查看安装的虚拟机
    • 2. 以调试模式启动
  • 三、调试控制台一些调试命令
    • 查看帮助
    • 查看内存
      • 反汇编
    • 其它常用命令
  • 四、命令行其它命令
    • 查看报告
  • 五、继续前面试验

一、 准备工具

  • 上章完成的引导程序和磁盘镜像
  • 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

系统会停止在加载状态:
学习x86汇编语言5 使用VirtualBox调试自己的引导程序_第1张图片
在下面的command可以输入调试指令。

三、调试控制台一些调试命令

查看帮助

help --all

查看内存

d 7c00

这时内存还没有内容:
学习x86汇编语言5 使用VirtualBox调试自己的引导程序_第2张图片

反汇编

u FFFF0

学习x86汇编语言5 使用VirtualBox调试自己的引导程序_第3张图片
这是一条跳到bios区域的跳转指令。

u 7c00

我们的程序还没有加载进来。
学习x86汇编语言5 使用VirtualBox调试自己的引导程序_第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等

四、命令行其它命令

查看报告

# 默认是生成一个压缩包
VBoxBugReport
# 文本方式输出
VBoxBugReport --text
# 指定虚拟机
VBoxBugReport a

五、继续前面试验

前面启动的虚拟机是暂停状态,到命令行让虚拟机继续运行:

VBoxManage.exe controlvm "a" resume

这里再看7c00区:

u 7c00

学习x86汇编语言5 使用VirtualBox调试自己的引导程序_第5张图片
正是前一章编写的引导程序。
使用d命令看看字符串:

d 7c00

在这里插入图片描述
查看寄存器,这里显示的是32位寄存器:

r

在这里插入图片描述

eax,ebx,ecx等正是前面所赋的值。
多试几次,可以看到eip的值保持不变,程序在这里进入了死循环,单步调试的指令在这里就没有多大的测试意义了。

学习x86汇编语言5 使用VirtualBox调试自己的引导程序_第6张图片

本文参考:
https://www.virtualbox.org/manual/ch12.html

你可能感兴趣的:(#,操作系统)