arm汇编在学习和开发过程中,免不了需要通过arm模拟器来进行一些调试,以及查看寄存器、查看汇编、单步调试等等操作,以下介绍一种全开源工具来调试arm汇编的方法。
1、预装环境
首先需要一个Ubuntu 18.04 + 的操作系统 我们需要安装一下必要的组件:
我们可以通过apt命令安装ddd作为可视化的汇编调试工具。
sudo apt install ddd qemu-system-arm
我们不可以使用apt去安装arm-none-eabi交叉编译工具链,尽管我们可以通过
sudo apt install binutils-arm-none-eabi
安装交叉编译工具,但是这套工具链中缺少了对于arm的gdb调试工具(可能我少安装了东西?),因此我们要去arm官网上下载arm交叉编译工具链,官方的包中包含针对arm汇编的gdb调试工具。
GNU ARM交叉编译工具链下载页面 解压后将gcc-arm-${版本}-${发布时间}-x86_64-arm-none-eabi/bin 目录加入$PATH环境变量中,以便于随时调用。
2、编写一个例子
借用别人的一个代码作为可以在qemu上运行的已经写好链接器脚本的例子, 例子代码 我们通过运行
make DEBUG=1 VERBOSE=1
来编译生成二进制文件axf作为启动内核,获得了我们的axf文件后,接下来我们启动模拟器
qemu-system-arm -s -S -kernel [axf文件路径].axf -M virt -cpu cortex-a7
-s 参数表示指定QEMU打开TCP上的1234端口作为gdbserver的调试端口 -S 指定CPU保留到调用QEMU监控器 或gdb的指令,模拟器启动后会显示qemu窗口,我们接下来就可以启动ddd来调试和查看。 -kernel [axf文件] 通过-kernel参数指定要启动的裸板程序,通常可以指定Linux内核 -M virt 指定启动类型为虚拟 -cpu cortex-a7 要虚拟的cpu类型为cortex-a7
3、启动调试
接下来我们启动ddd来指定调试器来查看可视化调试窗口:
ddd --debugger arm-none-eabi-gdb [axf文件路径].axf
我们仍然需要指定一个axf文件路径来告知gdb要调试的符号表是按照哪个axf固件文件的符号表进行调试。
启动后的窗口我们要在最下方的命令窗口执行:
target remote localhost:1234
进行远程主机调试。
我们输入以上命令回车后,会进入汇编调试状态,
窗口会进入到我们的汇编代码,这个时候我们就可以开始通过输入gdb命令的方式去进行调试跟踪。比如step等等,这些在旁边的快捷按钮窗口中也有提供。
调试过程期间,我们还可以对寄存器、线程、信号量进行查看和发送测试。 寄存器、线程、以及信号量都可以从status菜单中找到。 当单步调试时,可以看到箭头指向了正在执行的指令: 查看线程 查看寄存器 信号量发送测试 调试过程中如果需要查看正在运行的指令和地址,可以在View菜单中的machine code windows查看正在执行的指令和地址
|