gpt4 book ai didi

debugging - gdb 忽略 Qemu 引导加载程序中的断点

转载 作者:行者123 更新时间:2023-12-03 21:52:28 26 4
gpt4 key购买 nike

我正在尝试逐步执行本教程中显示的简单引导加载程序:http://mikeos.berlios.de/write-your-own-os.html - 所以我可以使用 Qemu 监视器来检查通用寄存器以用于教育目的。

尽管我能够连接 Qemu 和 gdb 并且断点设置在引导加载程序的开头(0x7c0),但在 gdb 上点击“c”后,代码一直运行到最后。

我读过 kvm 可能会将 gbd 与虚拟内存地址“混淆”,所以我禁用了它。这没有用。

我还阅读了( Debugging bootloader with gdb in qemu )在从 HEAD 编译 gdb 后调试 Freedos 启动时的工作。我没有重新编译 gdb,而是尝试调试 Freedos 启动 - 有效!

所以,我确实相信我的问题实际上是让教程的引导加载程序逐步执行。

我尝试过的其他事情(都没有奏效):

插入断点前使用几十个“si”
尝试不同的断点地址
在 qemu 上使用 -singlestep 键

这是我的 qemu 命令行:

qemu-system-i386 -fda disquete.img -boot a -s -S -monitor stdio

这是我在 gdb 中的命令序列:

(gdb) 目标远程本地主机:1234
(gdb) 设置架构 i8086
(gdb) br *0x7c0

然后我点击“c”,它一直通过断点。

版本:

$ uname -a

Linux Brod 3.8.0-30-generic#44-Ubuntu SMP Thu Aug 22 20:52:24 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

$ gdb --version

GNU gdb (GDB) 7.5.91.20130417-cvs-ubuntu

$ qemu --version

QEMU 模拟器版本 1.4.0 (Debian 1.4.0+dfsg-1expubuntu4),版权所有 (c) 2003-2008 Fabrice Bellard

由于我能够逐步完成 Freedos 引导,我相信我的设置很好,而且我一定是在对本文开头提到的引导加载程序教程的引导过程的一些概念性误解中失败了。

欢迎所有帮助!

最佳答案

由于硬件虚拟化,可能需要使用硬件断点:
(gdb) hbreak *0x7c00
还要注意 gdb 中的正确架构,即使使用 64 位 CPU(或 kvm):引导加载程序需要 (gdb) set architecture i8086因为 CPU 仍处于实模式。

关于debugging - gdb 忽略 Qemu 引导加载程序中的断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19285660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com