我为MBR部分编写了一个x86汇编程序。 我编译如下:
nasm hellombr.asm -f bin -o hellombr.img
然后我在qemu中运行它:
qemu -fda hellombr.img -boot a
问题是如何在源代码级别调试我的程序?
答案 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开发的提示/建议。