【问题标题】:How to do source level debugging of x86 code with GDB inside QEMU?如何在 QEMU 中使用 GDB 对 x86 代码进行源代码级调试?
【发布时间】:2012-01-07 09:37:11
【问题描述】:

我为 MBR 部分编写了一个 x86 汇编程序。 我编译如下:

nasm hellombr.asm -f bin -o hellombr.img

然后我在 qemu 中运行它:

qemu -fda hellombr.img -boot a

问题是如何在源代码级别调试我的程序?

【问题讨论】:

  • 你看过here吗?我知道 GDB 可以进行源代码级调试。
  • 这是问题所在,我无法让 GDB 使用源代码。 NASM 拒绝使用 -g 标志编译平面二进制文件。

标签: debugging assembly x86 qemu


【解决方案1】:

您应该让nasm 在 ELF 文件中创建调试符号,然后将其转储到平面二进制文件中以在 MBR 中使用。然后,您可以指示 GDB 从 ELF 文件中读取必要的符号。

完整的过程会变成这样:

$ nasm hellombr.asm -f 精灵 -g -o hellombr.elf $ objcopy -O 二进制 hellombr.elf hellombr.img $ qemu -s -S -fda hellombr.img -boot a $gdb (gdb) 符号文件 hellombr.elf (gdb) 目标远程 localhost:1234

有关我传递给qemu 的标志的解释,请参阅this 答案。

【讨论】:

    【解决方案2】:

    不要使用 qemu,而是使用 bochs。它完全兼容,尽管速度较慢。它也是一个模拟器,但如果你从源代码中制作它,使用这些标志并像这样构建它:

    ./configure --enable-debugger --enable-disasm --disable-docbook
    make
    make install
    

    您可以在代码中放置断点,单步执行,查看 GDT、IDT 以及您需要了解的所有内容。

    【讨论】:

      【解决方案3】:

      一个非常好的(并且简单)的方法是使用带有 bochs 的 IDA,您可以在上面找到一篇出色的博客文章 here,以及一些其他关于引导加载程序开发的提示/建议。

      【讨论】:

        猜你喜欢
        • 2015-01-11
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多