学习ARM汇编时,少不了对ARM汇编指令的调试。作为支撑多语言的调试器,gdb自然是较好的挑选。调试器作业时,一般经过修正代码段的内容结构trap软中止指令,完成程序的暂停和程序履行状况的监控。为了在x86平台上履行ARM指令,能够运用qemu模拟器履行ARM汇编指令。
一、预备ARM汇编程序
首要,咱们结构一段简略的ARM汇编程序作为测验代码main.s。
.globl _start_start:mov R0,#0swi 0x00901
以上汇编指令完成了0号体系调用exit的调用。mov指令将体系调用号传入寄存器R0,然后运用0x00901软中止堕入体系调用。
为了运转ARM汇编代码,需求运用穿插编译器arm-linux-gcc对ARM汇编代码进行编译。下载穿插编译器装置结束后,对ARM汇编代码进行编译。
arm-linux-gcc main.s -o main -nostdlib
编译选项“-nostdlib”表明不运用任何运转时库文件,编译生成的可履行文件main只能在ARM体系结构的体系上运转。
二、编译装置qemu模拟器
为了x86的Linux体系内运转ARM体系结构的可履行程序,需求装置qemu模拟器。
首要下载qemu源码,然后确保体系现已装置了flex和bison。
编译装置qemu。
./configure --prefix=/usrsudo make && make install
然后运用qemu的ARM模拟器履行ARM程序。
qemu ./main
三、编译装置arm-gdb
为了调试ARM程序,需求运用gdb的源码编译生成arm-gdb。
首要下载gdb源代码,编译装置。
./configure --target=arm-linux --prefix=/usr/localsudo make && make install
为了和体系的gdb防止抵触,咱们将gdb的装置目录装置到/usr/local,然后树立软链接即可。
ln -s /usr/bin/arm-gdb /usr/local/gdb/gdb
之后便能够运用arm-gdb指令调试ARM程序了。
四、调试ARM程序
首要运用qemu翻开长途调试端口。
qemu-arm -g 1024 ./main
然后导出环境变量QEMU_GDB。
export QEMU_GDB=/usr/local/gdb
最终,进入gdb调试。
arm-gdb ./main
进入arm-gdb后,首要衔接长途调试端口。
(gdb) target remote localhost:1024
然后运用gdb常用的调试指令调试代码即可。
(gdb) disassemble // 检查反汇编(gdb) x /8xw 0x0808e // 检查内存(gdb) info register // 检查寄存器(gdb) continue // 持续履行(gdb) stepi // 汇编级逐进程(gdb) nexti // 汇编级逐句子