我正在使用i386引导加载程序,并且在我的Apple Silicon机器上使用QEMU运行它,并且一切都工作得很好,除了我无法调试它:GDB不(尚未?)在AS上工作,LLDB严格拒绝加载原始二进制文件。
$ qemu-system-i386 -s -S -drive format=raw,file=boot.bin,media=disk,if=floppy -no-fd-bootchk
但是这个错误出来了:
$ lldb boot.bin
(lldb) target create "boot.bin"
error: '/Users/morpheu5/src/boots/cube/boot.bin' doesn't contain the architecture x86_64
,我也试过这个,因为它应该是i386,而不是x86_64:
$ lldb --arch i386 boot.bin
(lldb) target create --arch=i386 "boot.bin"
error: '/Users/morpheu5/src/boots/cube/boot.bin' doesn't contain the architecture i386
但这并没有太大的区别。内联帮助不是很有帮助,我在网上搜索没有成功。
现在,我有替代方案:bochs有一个内部调试器,但基于文本的界面有点笨拙,我甚至不知道如何预先设置某些断点-我喜欢在0x7c00上中断,否则我必须通过整个BIOS代码-我甚至不能运行gui调试器,尽管已经用display_library: sdl2, options=gui_debug
配置了它。另一种选择是树莓派,我可能会使用gdb,但我还没有尝试过,它是一个零,所以它甚至没有那么强大——不是我需要它,但我宁愿保持我的工作流程顺利…
很明显lldb不识别二进制的格式,所以我想知道是否有一种方法可以要求它将其反汇编为32位二进制并尽其所能地滚动。最后,我真正需要的是一种查看内存、寄存器和堆栈中的内容的方法。
任何想法?
经过几周的试验,lldb似乎不是一个可行的选择,但是Bochs的命令行调试器还是有点用的。可惜我不能让GUI在macOS上运行。
brew install x86_64-elf-gdb
qemu-system-i386 -s -S result.bin
x86_64-elf-gdb -ex "target remote localhost:1234" -ex "set architecture i8086" -ex "set disassembly-flavor intel" ····
这对我来说是可行的,但是不使用lldb。