在qemu中调试RISC-V
有时通过qemu调试RISC-V指令集的程序还是挺有趣的,qemu-system-riscv32
可以选择几个机型,一般使用的最多的是virt
。
这是一个不对应任何真实硬件的平台,专为在虚拟机中使用而设计。virt需要使用合适的配置编译Linux,以便在开发virt板上运行。
virt
支持PCI、virtio、最新的CPU和大RAM。它还支持 64 位 CPU。
调试Linux不是太难,但调试bare metal program就不那么容易了。比如我在hackgame-2022-wp中记录的:
qnum模拟器固件加载在0x1000处,并且默认将elf加载到0x80000000,通过0x1014处的指令跳转到0x80000000,但是通过反汇编bootloader,我们可以看到,elf本来加载的地址应该是0x20001000。
所以需要在gdb中手动将二进制通过gdb restore命令恢复到内存地址0x20001000中,以便和二进制中的基址正确匹配。然后对0x1014的指令进行patch,跳转到0x20001000。就可以将这个程序模拟run起来了。
简单记录一下。
评论
评论插件加载失败
正在加载评论插件