Kali环境Bochs运行NASM汇编引导程序触发PANIC报错求助
Bochs启动PANIC报错排查与引导代码修复
报错核心原因
该报错和使用Kali还是Ubuntu系统没有本质关联,两类系统均为Debian衍生版,Bochs运行逻辑完全一致,触发PANIC的核心原因有两类:
- 直接执行
bochs命令时,当前目录下不存在合法的Bochs配置文件,模拟器找不到启动必需的ROM、镜像、硬件参数配置,直接触发崩溃 - 引导汇编代码的分区表段填写存在错误,可能导致Bochs无法正确识别镜像格式
修复步骤
1. 配置Bochs启动文件
在存放镜像的bootDir目录下新建名为bochsrc.txt的配置文件,写入以下最小可用配置:
megs: 32 romimage: file=/usr/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest boot: disk log: bochsout.txt mouse: enabled=0 ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 ata0-master: type=disk, path=boot.img, mode=flat
配置说明:
- 若Kali下Bochs的BIOS文件路径和上述不一致,可执行
whereis bochs查找对应BIOS、VGA BIOS文件的实际存放路径替换path=boot.img替换为你编译生成的引导镜像实际文件名
后续启动Bochs时不要直接执行bochs命令,改用bochs -f bochsrc.txt指定配置文件启动,即可解决配置缺失导致的PANIC。
2. 修正引导汇编代码
原代码存在两处问题:一是标签后多余空格可能导致NASM编译产生意外偏移,二是手动填写的分区表参数值错误(将分区类型填为了扩展分区标识0xf0),测试引导阶段不需要构造真实分区表,直接填充到引导扇区规定长度即可。修正后的可正常运行代码如下:
[BITS 16] [ORG 0x7c00] start: xor ax,ax mov ds,ax mov es,ax mov ss, ax mov sp, 0x7c00 PrintMessage: mov ah,0x13 mov al, 1 mov bx,0x000a ; BH=页号0,BL=文字属性为亮绿色 xor dx,dx ; DH=起始行号0,DL=起始列号0 mov bp, Message mov cx, MessageLen int 0x10 End: hlt jmp End Message: db "Hello" MessageLen: equ $-Message ; 填充到510字节位置,末尾写入引导扇区合法签名 times 510-($-$$) db 0 dw 0xaa55
使用以下命令编译代码生成可引导镜像:nasm -f bin 你的汇编源文件名.asm -o boot.img
编译完成后再启动Bochs,即可正常看到引导输出的"Hello"字符串。
内容的提问来源于stack exchange,提问作者Achref Legend
相关产品推荐
相关产品推荐

