自己动手写一个操作系统——MBR(3)_调试

博客介绍了如何验证BIOS将MBR加载到内存0x7c00处运行。通过GDB调试,在内存地址0x7c00处打断点,查看该地址开始的512字节数据,发现与mbr.bin文件内容相同,证明BIOS已识别并加载MBR到指定内存地址运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

前面我们讲到,BIOS 会将 MBR 加载到内存的 0x7c00 处运行,我们如何验证呢?那就是通过 GDB 调试。

image

上篇文章中编译出的 mbr.img 内容如下

$ hexdump -C output/mbr.img 
00000000  eb fe 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

gdb

我们使用 gdb 调试,在内存地址 0x7c00 处打个断点,当 CPU 执行到这个地址时就会暂停。
然后查看内存 0x7c00 开始的 512 字节数据

(gdb) b *0x7c00
Breakpoint 1 at 0x7c00
(gdb) target remote :1234
Remote debugging using :1234
warning: No executable has been specified and target does not support
determining executable automatically.  Try using the "file" command.
0x0000fff0 in ?? ()
(gdb) c
Continuing.

Breakpoint 1, 0x00007c00 in ?? ()
(gdb) x/512xb 0x7c00
0x7c00: 0xeb    0xfe    0x00    0x00    0x00    0x00    0x00    0x00
0x7c08: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c10: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c18: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c20: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c28: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c30: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c38: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c40: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
--Type <RET> for more, q to quit, c to continue without paging--c
0x7c48: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c50: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c58: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c60: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c68: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c70: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c78: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c80: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c88: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c90: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7c98: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7ca0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7ca8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7cb0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7cb8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7cc0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7cc8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7cd0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7cd8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7ce0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7ce8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7cf0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7cf8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d00: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d08: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d10: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d18: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d20: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d28: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d30: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d38: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d40: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d48: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d50: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d58: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d60: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d68: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d70: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d78: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d80: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d88: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d90: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7d98: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7da0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7da8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7db0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7db8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7dc0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7dc8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7dd0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7dd8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7de0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7de8: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7df0: 0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x7df8: 0x00    0x00    0x00    0x00    0x00    0x00    0x55    0xaa

发现从 0x7c00 开始的 512 字节内容和 mbr.bin 文件内容相同。说明 BIOS 已经识别到我们编写的 MBR,并且已经将 MBR 加载到了内存的 0x7c00 处,并且跳转到了 0x7c00 处开始运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Li-Yongjun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值