如何在QEMU中使用GDB对x86代码进行源代码级调试?

时间:2011-11-27 16:47:45

标签: debugging assembly x86 qemu

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

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

然后我在qemu中运行它:

qemu -fda hellombr.img -boot a

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

3 个答案:

答案 0 :(得分:4)

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

完整的程序将变为这样:

$ nasm hellombr.asm -f elf -g -o hellombr.elf
$ objcopy -O binary hellombr.elf hellombr.img
$ qemu -s -S -fda hellombr.img -boot a
$ gdb
(gdb) symbol-file hellombr.elf
(gdb) target remote localhost:1234

有关我传递给qemu的标记的说明,请参阅this回答。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

一个非常好(和简单)的方法是将IDA与bochs一起使用,你可以找到一篇优秀的博客文章here,以及其他一些关于bootloader开发的提示/建议。