2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Other

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

时间:11-21来源:作者:点击数:22
城东书院 www.cdsy.xyz

前言

前面我们讲到,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 处开始运行。

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐