使用 ndisasm 反汇编 boot.bin

ndisasm 是 NASM 自带的反汇编工具,非常适合 16 位实模式代码,输出接近 Intel 语法,更易于与源码对照。


一、反汇编命令

1
ndisasm -b 16 boot.bin
  • -b 16:指定 16 位模式
  • boot.bin:目标二进制文件(纯启动扇区)

二、反汇编结果示例

以打印 "Hi" 的 bootloader 为例:

1
2
3
4
5
6
7
8
9
10
00000000  B40E              mov ah,0Eh
00000002 B048 mov al,'H'
00000004 CD10 int 10h
00000006 B069 mov al,'i'
00000008 CD10 int 10h
0000000A EBFE jmp 0Ah ; 无限循环
0000000C 0000 add [bx+si],al ; 填充字节
...
000001FE 55 push bp ; 启动扇区标志 0xAA55
000001FF AA stos byte [es:di]

三、关键解析

  1. 偏移地址
    • 输出左侧是二进制文件偏移,0x0000 开始
    • BIOS 加载到 0x7C00 内存,所以实际运行地址 = 偏移 + 0x7C00
  2. 指令对应源码
    • mov ah,0Eh → 源码 mov $0x0e,%ah
    • mov al,'H' → 源码 mov $'H',%al
  3. 启动标志 0xAA55
    • 文件末尾两字节 55 AA 是 BIOS 标识
    • 反汇编显示为 push bpstos byte [es:di]
    • 这部分不是可执行指令,仅供 BIOS 校验

四、优势

  • 输出格式为 Intel 语法,易于与源码对照
  • 对 16 位实模式非常友好
  • 可直接验证 bootloader 指令是否正确
  • 填充、跳转及启动标志等都能直观查看