制作VirtualBox可引导镜像失败求助:自定义引导扇区运行异常
问题排查与解决
一、虚拟机崩溃的核心原因(VirtualBox本身故障)
从提供的日志来看,虚拟机崩溃是因为VirtualBox无法加载内核模块VMMR0.r0,错误码VERR_LDR_GENERAL_FAILURE,这和引导扇区代码无关,属于VirtualBox系统级故障,解决步骤如下:
- 检查BIOS/UEFI设置,确保**虚拟化技术(VT-x/AMD-V)**已启用
- 右键以管理员权限启动VirtualBox,再尝试运行虚拟机
- 关闭系统中其他虚拟化相关程序:比如Hyper-V、WSL2、VMware等,这类程序会和VirtualBox内核模块冲突
- 若以上操作无效,卸载VirtualBox并重新下载最新版本安装,修复损坏的文件
二、引导扇区代码的潜在优化(提前规避后续问题)
你的代码本身可正常运行,但存在几个可优化的点:
1. 字符串长度自动计算
当前代码手动写死mov cx,13,若修改message内容,需手动同步数值,建议改为读取定义好的length:
mov cx, [length] ; 替换原来的mov cx,13
length的定义逻辑正确,汇编时会自动计算字符串长度。
2. 冗余代码清理
cli+hlt执行后,因已关闭中断,CPU会持续暂停,后续的jmp $永远不会执行,可删除该行冗余代码。
优化后的完整代码:
[ORG 0x7c00] BITS 16 main: mov ax, 0x07C0 mov ds, ax mov es, ax mov bp, message mov bh, 0 mov bl, 00001111b mov cx, [length] ; 自动读取字符串长度 mov al, 1 mov ah, 0x13 mov dx, 0 int 0x10 cli hlt message db "Hello, World!" length db (length - message) times 510-($-$$) db 0 dw 0xaa55
三、更可靠的ISO制作方式
使用mkisofs工具制作引导ISO比CDBurnerXP更可控,命令如下:
# Windows可通过Cygwin/WSL运行,Linux直接安装mkisofs后执行 mkisofs -o boot.iso -b sboot.img -no-emul-boot -boot-load-seg 0x7C00 -boot-load-size 1 .
参数说明:
-o boot.iso:指定输出的ISO文件名-b sboot.img:指定引导镜像文件-no-emul-boot:不使用软盘/硬盘仿真模式-boot-load-seg 0x7C00:指定引导程序加载的段地址-boot-load-size 1:加载1个扇区(512字节)
内容的提问来源于stack exchange,提问作者Jerzy z Bialowiezy
相关产品推荐
相关产品推荐

