Debugging 如何在QEMU中使用GDB对x86代码进行源代码级调试?
我为MBR部分编写了一个x86汇编程序。 我将其汇编如下:Debugging 如何在QEMU中使用GDB对x86代码进行源代码级调试?,debugging,assembly,x86,qemu,Debugging,Assembly,X86,Qemu,我为MBR部分编写了一个x86汇编程序。 我将其汇编如下: nasm hellombr.asm -f bin -o hellombr.img 然后我在qemu中运行它: qemu -fda hellombr.img -boot a 问题是如何在源代码级调试程序?使用qemu,而不是qemu。它是完全兼容的,尽管速度较慢。它也是一个仿真器,但如果您从源代码中创建它,请使用以下标志并按如下方式构建它: ./configure --enable-debugger --enable-disasm -
nasm hellombr.asm -f bin -o hellombr.img
然后我在qemu中运行它:
qemu -fda hellombr.img -boot a
问题是如何在源代码级调试程序?使用qemu,而不是qemu。它是完全兼容的,尽管速度较慢。它也是一个仿真器,但如果您从源代码中创建它,请使用以下标志并按如下方式构建它:
./configure --enable-debugger --enable-disasm --disable-docbook
make
make install
$ 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
您可以在代码中放置断点,逐步查看代码,查看GDT、IDT以及您需要了解的所有信息。一个非常好(且简单)的方法是将IDA与bochs一起使用,您可以在其中找到一篇优秀的博文,以及引导加载程序开发的一些其他提示/建议。您应该让
nasm
在ELF文件中创建调试符号,然后将其转储到一个平面二进制文件中,以便在MBR中使用。然后,您可以指示GDB从ELF文件中读取必要的符号
然后,整个过程将变成如下所示:
./configure --enable-debugger --enable-disasm --disable-docbook
make
make install
$ 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
$nasm hellombr.asm-f elf-g-o hellombr.elf
$objcopy-O二进制hellombr.elf hellombr.img
$qemu-s-s-fda hellombr.img-boot a
$gdb
(gdb)符号文件hellombr.elf
(gdb)目标远程本地主机:1234
有关传递给
qemu的标志的说明,请参见答案。您看过了吗?我知道GDB可以进行源代码级调试。这就是问题所在,我无法让GDB与源代码一起工作。NASM拒绝编译带有-g标志的平面二进制文件。