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



我为MBR节编写了一个x86汇编程序。我将其编译如下:

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

然后在qemu中运行:

qemu -fda hellombr.img -boot a

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

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

完整的过程变成如下所示:

<>之前你好。我-我-我-我-我-我$ objcopy -O二进制文件。精灵hellombr.img$ qemu -s -s -fda helombr。我的靴子gdb美元(gdb) symbol-file hellombr.elf(gdb)目标远端localhost:1234之前

我传递给qemu的标志的解释见这个答案

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

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

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

一个非常好的(和简单的)方法是将IDA与bochs一起使用,您可以在这里找到一篇关于它的优秀博客文章,以及其他一些引导加载程序开发的提示/建议。

最新更新